FileHelper.java
/*
*
* The DbUnit Database Testing Framework
* Copyright (C)2002-2008, DbUnit.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.dbunit.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
/**
* Utility that provides some general methods for working with {@link File} objects.
*
* @author gommma
* @version $Revision$
* @since 2.3.0
*/
public class FileHelper
{
private static Logger logger = LoggerFactory.getLogger(FileHelper.class);
private FileHelper(){
}
/**
* Recursively deletes the given directory
* @param directory The directory to delete
* @param failOnError If an exception should be thrown in case the deletion did not work.
*/
public static void deleteDirectory(File directory, boolean failOnError) {
boolean success = deleteDirectory(directory);
if(!success){
throw new RuntimeException("Failed to delete directory " + directory);
}
}
/**
* Recursively deletes the given directory
* @param directory The directory to delete
* @return <code>true</code> if the deletion was successfully.
*/
public static boolean deleteDirectory(File directory)
{
if(!directory.isDirectory()) {
logger.warn("The directory '" + directory + "' does not exist. Will return without delete.");
return false;
}
// First we must delete all files in the directory
File[] containedFiles = directory.listFiles();
for (int i = 0; i < containedFiles.length; i++) {
File currentFile = containedFiles[i];
if(currentFile.isDirectory()) {
// First delete children recursively
deleteDirectory(currentFile);
}
else {
// Delete the file itself
boolean success = currentFile.delete();
if(!success){
logger.warn("Failed to delete file '" + currentFile + "'");
}
}
}
// Finally delete the directory itself
boolean success = directory.delete();
if(!success){
logger.warn("Failed to delete file '" + directory + "'");
}
return success;
}
public static InputSource createInputSource(File file) throws MalformedURLException
{
String uri = file/*.getAbsoluteFile()*/.toURI().toURL().toString();
InputSource source = new InputSource(uri);
return source;
}
/**
* Copy file.
*
* @param srcFile the src file
* @param destFile the dest file
* @throws IOException
*/
public static void copyFile(File srcFile, File destFile) throws IOException
{
logger.debug("copyFile(srcFile={}, destFile={}) - start", srcFile, destFile);
// Create channel on the source
FileChannel srcChannel = new FileInputStream(srcFile).getChannel();
// Create channel on the destination
FileChannel dstChannel = new FileOutputStream(destFile).getChannel();
try {
// Copy file contents from source to destination
dstChannel.transferFrom(srcChannel, 0, srcChannel.size());
}
finally {
// Close the channels
srcChannel.close();
dstChannel.close();
}
}
/**
* Get a list of Strings from a given file.
* Uses the default encoding of the current platform.
*
* @param theFile the file to be read
* @return a list of Strings, each one representing one line from the given file
* @throws IOException
*/
public static List readLines(File theFile) throws IOException
{
logger.debug("readLines(theFile={}) - start", theFile);
InputStream tableListStream = new FileInputStream(theFile);
try {
List orderedNames = new ArrayList();
BufferedReader reader = new BufferedReader(new InputStreamReader(tableListStream));
String line = null;
while ((line = reader.readLine()) != null) {
String table = line.trim();
if (table.length() > 0) {
orderedNames.add(table);
}
}
return orderedNames;
}
finally {
tableListStream.close();
}
}
}