/*************************************** * * * JBoss: The OpenSource J2EE WebOS * * * * Distributable under LGPL license. * * See terms of license at gnu.org. * * * ***************************************/ package org.jboss.util.file; import java.io.File; import java.io.IOException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import org.jboss.logging.Logger; import org.jboss.util.stream.Streams; /** * A collection of file utilities. * * @version $Revision: 1.2.2.3 $ * @author Jason Dillon * @author Scott.Stark@jboss.org */ public final class Files { private static final Logger log = Logger.getLogger(Files.class); /** The default size of the copy buffer. */ public static final int DEFAULT_BUFFER_SIZE = 8192; /** Delete a file, or a directory and all of its contents. * * @param dir The directory or file to delete. * @return True if all delete operations were successfull. */ public static boolean delete(final File dir) { boolean success = true; File files[] = dir.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { File f = files[i]; if( f.isDirectory() == true ) { // delete the directory and all of its contents. if( delete(f) == false ) { success = false; log.debug("Failed to delete dir: "+f.getAbsolutePath()); } } // delete each file in the directory else if( f.delete() == false ) { success = false; log.debug("Failed to delete file: "+f.getAbsolutePath()); } } } // finally delete the directory if( dir.delete() == false ) { success = false; log.debug("Failed to delete dir: "+dir.getAbsolutePath()); } return success; } /** * Delete a file or directory and all of its contents. * * @param dirname The name of the file or directory to delete. * @return True if all delete operations were successfull. */ public static boolean delete(final String dirname) { return delete(new File(dirname)); } /** * Delete a directory contaning the given file and all its contents. * * @param filename a file or directory in the containing directory to delete * @return true if all delete operations were successfull, false if any * delete failed. */ public static boolean deleteContaining(final String filename) { File file = new File(filename); File containingDir = file.getParentFile(); return delete(containingDir); } /** * Copy a file. * * @param source Source file to copy. * @param target Destination target file. * @param buff The copy buffer. * * @throws IOException Failed to copy file. */ public static void copy(final File source, final File target, final byte buff[]) throws IOException { BufferedInputStream in = new BufferedInputStream(new FileInputStream(source)); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(target)); int read; try { while ((read = in.read(buff)) != -1) { out.write(buff, 0, read); } } finally { Streams.flush(out); Streams.close(in); Streams.close(out); } } /** * Copy a file. * * @param source Source file to copy. * @param target Destination target file. * @param size The size of the copy buffer. * * @throws IOException Failed to copy file. */ public static void copy(final File source, final File target, final int size) throws IOException { copy(source, target, new byte[size]); } /** * Copy a file. * * @param source Source file to copy. * @param target Destination target file. * * @throws IOException Failed to copy file. */ public static void copy(final File source, final File target) throws IOException { copy(source, target, DEFAULT_BUFFER_SIZE); } }