Java 复制多个文件

在开发过程中,我们经常会遇到需要复制多个文件的情况。Java 提供了多种方式来实现文件复制操作,本文将向您介绍其中的几种常用方法。

方法一:使用 Java IO 流

Java 提供了 FileInputStreamFileOutputStream 流,可以用于读取和写入文件。我们可以使用这两个流来实现文件的复制操作。

下面是一个示例代码,演示了如何使用 Java IO 流来复制多个文件:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopyExample {

    public static void main(String[] args) {
        String sourceDirectory = "path/to/source/directory";
        String targetDirectory = "path/to/target/directory";

        File sourceDir = new File(sourceDirectory);
        File targetDir = new File(targetDirectory);

        // 检查目标目录是否存在,若不存在则创建
        if (!targetDir.exists()) {
            targetDir.mkdirs();
        }

        // 获取源目录下的所有文件
        File[] files = sourceDir.listFiles();

        // 遍历所有文件,逐个复制
        for (File file : files) {
            if (file.isFile()) { // 只复制文件,不复制文件夹
                String fileName = file.getName();
                String targetPath = targetDirectory + File.separator + fileName;
                try (
                    FileInputStream fis = new FileInputStream(file);
                    FileOutputStream fos = new FileOutputStream(targetPath)
                ) {
                    byte[] buffer = new byte[1024];
                    int length;
                    while ((length = fis.read(buffer)) > 0) {
                        fos.write(buffer, 0, length);
                    }
                    System.out.println("成功复制文件:" + fileName);
                } catch (IOException e) {
                    System.out.println("复制文件失败:" + fileName);
                    e.printStackTrace();
                }
            }
        }
    }
}

在上面的示例中,我们首先指定了源目录和目标目录的路径。然后,我们使用 File 类来表示这两个目录。接下来,我们检查目标目录是否存在,如果不存在则创建它。

我们使用 listFiles() 方法获取源目录下的所有文件,并使用 for 循环逐个复制文件。在复制文件时,我们首先获取文件的名称,并根据目标目录和文件名构建目标路径。然后,我们使用 FileInputStream 读取源文件的内容,使用 FileOutputStream 将读取到的内容写入目标文件。

方法二:使用 Apache Commons IO

除了使用 Java IO 流外,我们还可以使用 Apache Commons IO 库来简化文件复制操作。Apache Commons IO 提供了 FileUtils 类,其中的 copyFile() 方法可以用来复制文件。

下面是一个使用 Apache Commons IO 的示例代码:

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;

public class FileCopyExample {

    public static void main(String[] args) {
        String sourceDirectory = "path/to/source/directory";
        String targetDirectory = "path/to/target/directory";

        File sourceDir = new File(sourceDirectory);
        File targetDir = new File(targetDirectory);

        // 检查目标目录是否存在,若不存在则创建
        if (!targetDir.exists()) {
            targetDir.mkdirs();
        }

        // 获取源目录下的所有文件
        File[] files = sourceDir.listFiles();

        // 遍历所有文件,逐个复制
        for (File file : files) {
            if (file.isFile()) { // 只复制文件,不复制文件夹
                String fileName = file.getName();
                String targetPath = targetDirectory + File.separator + fileName;
                try {
                    FileUtils.copyFile(file, new File(targetPath));
                    System.out.println("成功复制文件:" + fileName);
                } catch (IOException e) {
                    System.out.println("复制文件失败:" + fileName);
                    e.printStackTrace();
                }
            }
        }
    }
}

在上面的示例中,我们使用了 Apache Commons IO 的 copyFile() 方法来复制文件。这个方法非常方便,内部已经处理了文件流的打开和关闭操作。

方法三:使用 Java NIO

Java NIO(New IO)是 Java 1.4 引入的新 IO API,提供了更快速和灵活的 IO 操作方式。我们可以使用 Files 类来复制文件。

下面是一个使用 Java NIO 的示例代码:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths