题目
使用Java IO实现文件复制功能
信息
- 类型:问答
- 难度:⭐
考点
文件输入输出流,异常处理,资源关闭
快速回答
使用Java IO实现文件复制的核心步骤:
- 创建
FileInputStream读取源文件 - 创建
FileOutputStream写入目标文件 - 使用缓冲区循环读写字节数据
- 在
finally块或try-with-resources中关闭流 - 处理
IOException异常
原理说明
Java IO通过字节流实现文件复制:FileInputStream读取源文件字节,FileOutputStream将字节写入新文件。使用缓冲区减少IO操作次数,提升性能。
代码示例
import java.io.*;
public class FileCopy {
public static void main(String[] args) {
// 最佳实践:使用try-with-resources自动关闭资源
try (FileInputStream fis = new FileInputStream("source.txt");
FileOutputStream fos = new FileOutputStream("target.txt")) {
byte[] buffer = new byte[1024]; // 创建1KB缓冲区
int bytesRead;
// 循环读取并写入数据
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
System.out.println("文件复制成功!");
} catch (IOException e) {
System.err.println("复制失败: " + e.getMessage());
}
}
}最佳实践
- 使用try-with-resources:确保流自动关闭(Java 7+特性)
- 缓冲区大小:通常4KB-8KB性能最佳,避免过大消耗内存
- 精确写入:
write(buffer, 0, bytesRead)防止写入无效数据
常见错误
- 忘记关闭流:导致资源泄漏(使用try-with-resources可避免)
- 未处理异常:IOException必须捕获或声明抛出
- 忽略读取返回值:直接
fos.write(buffer)可能写入多余空字节
扩展知识
- NIO替代方案:Java NIO中可用
Files.copy(Path source, Path target)一行实现 - 字符流场景:文本文件建议用
BufferedReader/BufferedWriter - 性能对比:大文件复制时,NIO的
FileChannel.transferTo()效率更高