侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

使用Java IO实现文件复制功能

2025-12-13 / 0 评论 / 4 阅读

题目

使用Java IO实现文件复制功能

信息

  • 类型:问答
  • 难度:⭐

考点

文件输入输出流,异常处理,资源关闭

快速回答

使用Java IO实现文件复制的核心步骤:

  1. 创建FileInputStream读取源文件
  2. 创建FileOutputStream写入目标文件
  3. 使用缓冲区循环读写字节数据
  4. finally块或try-with-resources中关闭流
  5. 处理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()效率更高