使用Java复制和创建文件

时间:2011-05-14 12:38:56

标签: java

我正在尝试了解如何使用File类来创建新文件。

假设我要复制文件D:\example\file1并拥有相同的文件,现在将命名为file2

进入此文件夹:D:\example

首先我创建了file1 By File file=new File (D:\example\file1);

现在,我该怎么用? File类的静态方法?有createTempFile createTempFile,但我相信他们都不会。我想要。

1 个答案:

答案 0 :(得分:1)

f.e。

import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileFolderCopy {

    public static void copy(File source, File destination) throws IOException {
        if (source == null) {
            throw new NullPointerException("Null Source");
        }
        if (destination == null) {
            throw new NullPointerException("Null Destination");
        }
        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());
        if (!nextDirectory.exists() && !nextDirectory.mkdirs()) {// create the directory if necessary...
            Object[] filler = {nextDirectory.getAbsolutePath()};
            String message = "Dir Copy Failed";
            throw new IOException(message);
        }
        File[] files = source.listFiles();
        for (int n = 0; n < files.length; ++n) {// and then all the items below the directory...
            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 {
        // 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;
        try {
            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);
            }
        } catch (Exception e) {
            //
        } finally {
            input.close();
            output.close();
        }
        input = null;
        output = null;
    }

    private FileFolderCopy() {
    }
}