Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * * FileUtils is a collection of routines for common file system operations. * * @author Dan Jemiolo (danj) * */ public final class FileUtils { /** * * Starts at the directory given and tests to see whether it is empty; if so, * it deletes it and moves up the directory tree, deleting empty directories * until it finds a non-empty one. * * @param directory * The first directory to test. * * @throws IOException * <ul> * <li>If the directory does not exist or the user does not have * permission to delete it or its parents.</li> * </ul> * */ public static void pruneEmptyDirectories(File directory) throws IOException { if (directory == null) throw new NullPointerException("NullFile"); if (!directory.isDirectory()) { Object[] filler = { directory.getAbsolutePath() }; String message = "NotDirectory"; throw new IllegalArgumentException(message); } // // check to see if the directory is now empty and, if so, delete it // too, moving up the tree until we find one with stuff in it // while (directory != null) { File[] directoryFiles = directory.listFiles(); // // if the directory has files, we're done // if (directoryFiles.length > 0) break; if (!directory.delete()) { Object[] filler = { directory.getAbsolutePath() }; String message = "DeleteFailed"; throw new IOException(message); } // // go up the tree // directory = directory.getParentFile(); } } /** * * The application's current working directory. * */ public static final File CURRENT_DIR = new File("."); /** * * This is a convenience method that calls remove(File, boolean) with the * second parameter set to "false" (doesn't prune empty directories). * * @see #remove(File, boolean) * */ public static void remove(File file) throws IOException { remove(file, false); } /** * * @param file * The file or directory to delete. * * @param pruneEmptyDirectories * True if the deletion results in an empty parent directory. If set * to true, this method will traverse up the directory tree, deleting * directories that are made empty by the deletion. * * @throws IOException * <ul> * <li>If there was an error trying to remove the file or * directory. The file system may be in an inconsistent state when * the exception is thrown (directories may be partially deleted, * etc.).</li> * </ul> * */ public static void remove(File file, boolean pruneEmptyDirectories) throws IOException { if (file == null) throw new NullPointerException("NullFile"); if (file.isDirectory()) removeDirectory(file); else removeFile(file); if (pruneEmptyDirectories) pruneEmptyDirectories(file.getParentFile()); } private static void removeDirectory(File directory) throws IOException { File[] files = directory.listFiles(); // // for all items in the directory... // for (int n = 0; n < files.length; ++n) { File nextFile = files[n]; // // if it's a directory, delete sub-directories and files before // removing the empty directory // if (nextFile.isDirectory()) removeDirectory(nextFile); // // otherwise just delete the file - do NOT prune the directory // in advance // else removeFile(nextFile); } // // now that everything's gone, delete the specified directory // if (!directory.delete()) { Object[] filler = { directory.getAbsolutePath() }; String message = "DeleteFailed"; throw new IOException(message); } } private static void removeFile(File file) throws IOException { // // make sure the file exists, then delete it // if (!file.exists()) throw new FileNotFoundException(file.getAbsolutePath()); if (!file.delete()) { Object[] filler = { file.getAbsolutePath() }; String message = "DeleteFailed"; throw new IOException(message); } } }