Java 文件复制实战:字符缓冲流 vs 字节缓冲流 一、题目要求

一、本次练习来自竞赛题 homework to blog,核心任务如下:

文本文件复制 —— 使用字符缓冲流(BufferedReader / BufferedWriter),这也是处理文本文件最常用的方式。

任意文件复制 —— 使用字节缓冲流(BufferedInputStream / BufferedOutputStream),可以复制图片、视频、压缩包等任何格式,因此称为“万能复制”。

二、代码实现

  1. 文本文件复制(字符缓冲流)
    java
    import java.io.*;

public class TextFileCopy {
public static void main(String[] args) {
// 源文件路径和目标文件路径(请根据实际修改)
String source = "source.txt";
String dest = "dest.txt";

// 使用 try-with-resources 自动关闭流(Java 7+)
try (BufferedReader br = new BufferedReader(new FileReader(source));
BufferedWriter bw = new BufferedWriter(new FileWriter(dest))) {

String line;
// 按行读写,效率高且保留换行符
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine(); // 写入对应系统的换行符
}

System.out.println("文本文件复制完成!");

} catch (IOException e) {
e.printStackTrace();
}
}
}
关键点说明:

readLine() 一次读一行,方便处理带换行的文本。

newLine() 会根据操作系统自动写入 \n 或 \r\n,保证可移植性。

字符缓冲流处理文本文件最常用、最安全。

  1. 任意文件复制(字节缓冲流)
    java
    import java.io.*;

public class AnyFileCopy {
public static void main(String[] args) {
// 源文件(可以是图片、视频、PDF等)与目标文件
String source = "example.jpg";
String dest = "copy_example.jpg";

try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(source));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest))) {

byte[] buffer = new byte[8192]; // 8KB缓冲区
int len;
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}

System.out.println("任意文件复制完成!");

} catch (IOException e) {
e.printStackTrace();
}
}
}
关键点说明:

字节流不关心文件内容,原样复制每个字节,因此可以处理任何文件。

使用 byte[] 缓冲区(建议大小 4KB~8KB)批量读写,比单字节循环快得多。

bis.read(buffer) 返回实际读取的字节数,最后一次可能不足缓冲区大小,所以 write(buffer, 0, len) 确保只写入有效部分。

三、运行效果演示
假设当前目录下有 source.txt。

执行 TextFileCopy 后:

生成 dest.txt,内容与源文件完全相同。

执行 AnyFileCopy 后:

控制台输出:

text
文本文件复制完成!
任意文件复制完成!

四、总结
场景 推荐方案
复制文本文件(.txt, .java, .md等) BufferedReader + BufferedWriter
复制任意类型文件(图片、视频、压缩包等) BufferedInputStream + BufferedOutputStream

字符缓冲流处理文本方便,按行读写符合人类阅读习惯。字节缓冲流是万能方案,支持所有文件格式,复制二进制文件必须使用它。
无论哪种,都要使用缓冲流 + 缓冲区数组 来保证效率。快动手试试吧!

posted @ 2026-06-03 09:49  jenini  阅读(13)  评论(0)    收藏  举报