Copy file and directory : Copy « File « 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();
  }

}








11.78.Copy
11.78.1.Copy the source file system structure into the supplied target location.
11.78.2.Buffered copying between source(InputStream, Reader, String and byte[]) and destinations (OutputStream, Writer, String and byte[]).
11.78.3.Copies all data from an input stream to an output stream.
11.78.4.Copies the contents of the Reader into the Writer, until the end of the stream has been reached.
11.78.5.Copy a directory and all of its contents.
11.78.6.Copy a file and user buffer
11.78.7.Copy chars from a Reader to a Writer.
11.78.8.copy Completely (InputStream input, OutputStream output)
11.78.9.copy Completely (Reader input, Writer output)
11.78.10.copy Completely(URI input, URI output)
11.78.11.Buffered copying
11.78.12.Copy file and directory