/**
* This file is part of OSM2ShareNav
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation.
*
* Copyright (C) 2009 sk750
*
*/
package net.sharenav.osmToShareNav.tools;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileTools {
public static int countFiles(String source) {
return countFiles(new File(source));
}
public static int countFiles(File source) {
int numFiles = 0;
File[] files = source.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
numFiles += countFiles(file);
}
else {
numFiles += 1;
}
}
}
return numFiles;
}
public static int copyDir(String source, String dest, boolean flat, boolean onlyReplaceExisting) {
return copyDir(new File(source), new File(dest), flat, onlyReplaceExisting);
}
public static int copyDir(File source, File dest, boolean flat, boolean onlyReplaceExisting) {
int numFilesCopied = 0;
File[] files = source.listFiles();
if (files != null) {
dest.mkdirs();
for (File file : files) {
if (file.isDirectory()) {
if (flat) {
numFilesCopied += copyDir(file, dest, flat, onlyReplaceExisting);
} else {
numFilesCopied += copyDir(file, new File(dest.getAbsolutePath() + System.getProperty("file.separator") + file.getName()), flat, onlyReplaceExisting);
}
}
else {
numFilesCopied += copyFile(file, new File(dest.getAbsolutePath() + System.getProperty("file.separator") + file.getName()), onlyReplaceExisting);
}
}
}
return numFilesCopied;
}
public static int copyFile(File source, File dest, boolean onlyReplaceExisting) {
if (onlyReplaceExisting && !dest.exists()) {
return 0;
}
if (dest.exists()) {
dest.delete();
}
try {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(source));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dest, true));
int bytes = 0;
while ((bytes = in.read()) != -1) {
out.write(bytes);
}
in.close();
out.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
return 0;
}
return 1;
}
public static FileOutputStream createFileOutputStream(String name) throws FileNotFoundException{
File f=new File(name);
createPath(f.getParentFile());
return new FileOutputStream(f);
}
/**
* Ensures that the path denoted with <code>f</code> will exist
* on the file-system.
* @param f File whose directory must exist
*/
public static void createPath(File f) {
if (! f.canWrite()) {
createPath(f.getParentFile());
}
f.mkdir();
}
}