Java 复制多个文件
在开发过程中,我们经常会遇到需要复制多个文件的情况。Java 提供了多种方式来实现文件复制操作,本文将向您介绍其中的几种常用方法。
方法一:使用 Java IO 流
Java 提供了 FileInputStream
和 FileOutputStream
流,可以用于读取和写入文件。我们可以使用这两个流来实现文件的复制操作。
下面是一个示例代码,演示了如何使用 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