java如何复制文件
使用 Files.copy() 方法(NIO)
java.nio.file.Files 类提供高效的复制方法,适用于 Java 7 及以上版本。
语法示例:
Path source = Paths.get("source.txt");
Path target = Paths.get("target.txt");
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
参数说明:
StandardCopyOption.REPLACE_EXISTING:覆盖已存在的目标文件。- 可添加
StandardCopyOption.COPY_ATTRIBUTES复制文件属性。
使用 FileInputStream 和 FileOutputStream(传统IO)
通过字节流逐块读写文件,兼容所有 Java 版本。
示例代码:
try (InputStream in = new FileInputStream("source.txt");
OutputStream out = new FileOutputStream("target.txt")) {
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
}
注意:
- 使用
try-with-resources确保流自动关闭。 - 缓冲区大小(如 1024 字节)可调整以平衡性能与内存占用。
使用 Apache Commons IO 库
第三方库 commons-io 提供简化方法,需添加依赖:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
复制示例:
FileUtils.copyFile(new File("source.txt"), new File("target.txt"));
优势:
- 单行代码实现,支持目录复制和异常处理。
处理大文件的优化建议
对于大文件(如超过 1GB):
- 使用 NIO 的
Files.copy()或带缓冲的字节流,避免内存溢出。 - 禁用自动缓冲(如设置
BufferedInputStream缓冲区为 8KB)。
错误处理
所有方法需捕获 IOException:
try {
// 复制操作
} catch (IOException e) {
e.printStackTrace();
}
常见异常:
FileNotFoundException:源文件不存在。AccessDeniedException:无写入目标路径权限。







