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 { /** * * The application's current working directory. * */ public static final File CURRENT_DIR = new File("."); /** * * Copies the first file or directory to the second file or directory. <br> * <br> * If the first parameter is a file and the second is a file, then the method * copies the contents of the first file into the second. If the second file * does not exist, it is created. <br> * <br> * If the first parameter is a file and the second is a directory, the file is * copied to the directory, overwriting any existing copy. <br> * <br> * If the first parameter is a directory and the second is a directory, the * first is copied underneath the second. <br> * <br> * If the first parameter is a directory and the second is a file name or does * not exist, a directory with that name is created, and the contents of the * first directory are copied there. * * @param source * @param destination * * @throws IOException * <ul> * <li>If the source does not exist.</li> * <li>If the user does not have permission to modify the * destination.</li> * <li>If the copy fails for some reason related to system I/O.</li> * </ul> * */ public static void copy(File source, File destination) throws IOException { if (source == null) throw new NullPointerException("NullSource"); if (destination == null) throw new NullPointerException("NullDestination"); if (source.isDirectory()) copyDirectory(source, destination); else copyFile(source, destination); } public static void copyDirectory(File source, File destination) throws IOException { copyDirectory(source, destination, null); } public static void copyDirectory(File source, File destination, FileFilter filter) throws IOException { File nextDirectory = new File(destination, source.getName()); // // create the directory if necessary... // if (!nextDirectory.exists() && !nextDirectory.mkdirs()) { Object[] filler = { nextDirectory.getAbsolutePath() }; String message = "DirCopyFailed"; throw new IOException(message); } File[] files = source.listFiles(); // // and then all the items below the directory... // for (int n = 0; n < files.length; ++n) { if (filter == null || filter.accept(files[n])) { if (files[n].isDirectory()) copyDirectory(files[n], nextDirectory, filter); else copyFile(files[n], nextDirectory); } } } public static void copyFile(File source, File destination) throws IOException { // // if the destination is a dir, what we really want to do is create // a file with the same name in that dir // if (destination.isDirectory()) destination = new File(destination, source.getName()); FileInputStream input = new FileInputStream(source); copyFile(input, destination); } public static void copyFile(InputStream input, File destination) throws IOException { OutputStream output = null; output = new FileOutputStream(destination); byte[] buffer = new byte[1024]; int bytesRead = input.read(buffer); while (bytesRead >= 0) { output.write(buffer, 0, bytesRead); bytesRead = input.read(buffer); } input.close(); output.close(); } }