package org.insightech.er.util.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class FileUtils {
public static void deleteDirectory(File directory) throws IOException {
if (!directory.exists())
return;
cleanDirectory(directory);
if (!directory.delete()) {
String message = "Unable to delete directory " + directory + ".";
throw new IOException(message);
} else {
return;
}
}
public static void cleanDirectory(File directory) throws IOException {
if (!directory.exists()) {
String message = directory + " does not exist";
throw new IllegalArgumentException(message);
}
if (!directory.isDirectory()) {
String message = directory + " is not a directory";
throw new IllegalArgumentException(message);
}
File files[] = directory.listFiles();
if (files == null)
throw new IOException("Failed to list contents of " + directory);
IOException exception = null;
for (int i = 0; i < files.length; i++) {
File file = files[i];
try {
forceDelete(file);
} catch (IOException ioe) {
exception = ioe;
}
}
if (null != exception)
throw exception;
else
return;
}
public static void forceDelete(File file) throws IOException {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
if (!file.exists())
throw new FileNotFoundException("File does not exist: " + file);
if (!file.delete()) {
String message = "Unable to delete file: " + file;
throw new IOException(message);
}
}
}
public static void copyFile(File srcFile, File destFile) throws IOException {
copyFile(srcFile, destFile, true);
}
public static void copyFile(File srcFile, File destFile,
boolean preserveFileDate) throws IOException {
if (srcFile == null)
throw new NullPointerException("Source must not be null");
if (destFile == null)
throw new NullPointerException("Destination must not be null");
if (!srcFile.exists())
throw new FileNotFoundException("Source '" + srcFile
+ "' does not exist");
if (srcFile.isDirectory())
throw new IOException("Source '" + srcFile
+ "' exists but is a directory");
if (srcFile.getCanonicalPath().equals(destFile.getCanonicalPath()))
throw new IOException("Source '" + srcFile + "' and destination '"
+ destFile + "' are the same");
if (destFile.getParentFile() != null
&& !destFile.getParentFile().exists()
&& !destFile.getParentFile().mkdirs())
throw new IOException("Destination '" + destFile
+ "' directory cannot be created");
if (destFile.exists() && !destFile.canWrite()) {
throw new IOException("Destination '" + destFile
+ "' exists but is read-only");
} else {
doCopyFile(srcFile, destFile, preserveFileDate);
return;
}
}
private static void doCopyFile(File srcFile, File destFile,
boolean preserveFileDate) throws IOException {
if (destFile.exists() && destFile.isDirectory())
throw new IOException("Destination '" + destFile
+ "' exists but is a directory");
FileInputStream input = new FileInputStream(srcFile);
try {
FileOutputStream output = new FileOutputStream(destFile);
try {
IOUtils.copy(input, output);
} finally {
IOUtils.closeQuietly(output);
}
} finally {
IOUtils.closeQuietly(input);
}
if (srcFile.length() != destFile.length())
throw new IOException("Failed to copy full contents from '"
+ srcFile + "' to '" + destFile + "'");
if (preserveFileDate)
destFile.setLastModified(srcFile.lastModified());
}
public static byte[] readFileToByteArray(File file) throws IOException {
java.io.InputStream in = null;
try {
in = new FileInputStream(file);
byte abyte0[] = IOUtils.toByteArray(in);
return abyte0;
} finally {
IOUtils.closeQuietly(in);
}
}
public static void writeByteArrayToFile(File file, byte data[])
throws IOException {
OutputStream out = new FileOutputStream(file);
try {
out.write(data);
} finally {
IOUtils.closeQuietly(out);
}
}
public static void writeStringToFile(File file, String data, String encoding)
throws IOException {
OutputStream out = new FileOutputStream(file);
try {
IOUtils.write(data, out, encoding);
} finally {
IOUtils.closeQuietly(out);
}
}
}