Java IO 核心:BufferedReader、BufferedWriter、PrintStream 与 PrintWriter 详解
一、笔记概述
本文聚焦 Java IO 体系中高频使用的 4 个字符/字节流工具类(BufferedReader、BufferedWriter、PrintStream、PrintWriter),从核心定位、功能差异、适用场景、代码示例、拓展技巧五个维度拆解,帮助理解其设计逻辑与实际应用,解决'该用哪个流写/读数据'的核心问题。
二、核心定位与设计目标
这 4 个类分为两大阵营,核心设计目标差异显著:
1. 缓冲流阵营(BufferedReader + BufferedWriter)
属于 Java IO 底层高效字符流,核心目标是提升字符读写效率。通过内置字符缓冲区减少磁盘/网络 IO 次数(避免每次读写都触发底层硬件操作),是处理文本文件'基础且高效'的核心工具,偏底层、偏严谨。
2. 打印流阵营(PrintStream + PrintWriter)
属于 Java IO 上层易用型流,核心目标是便捷地格式化输出数据。屏蔽了繁琐的 IO 异常处理,支持所有基本数据类型(int、double、boolean 等)和对象的直接打印,还提供格式化输出(printf),是面向'业务输出、日志打印、控制台展示'的易用工具,偏上层、偏实用。
三、逐个拆解:功能、示例、适用场景
1. BufferedReader(字符缓冲输入流)
核心功能
- 包装底层字符输入流(如 FileReader),通过缓冲区提升文本读取效率;
- 提供核心方法
readLine(),可直接按行读取文本(返回一行字符串,null 表示读取完毕),解决了'手动拼接字符读行'的繁琐; - 所有 IO 操作都会抛出
IOException,必须手动处理(try-catch 或 throws)。
代码示例(按行读取文本文件)
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderDemo {
public static void main(String[] args) {
// 推荐使用 try-with-resources 自动关闭流(Java 7+)
try (BufferedReader br = new BufferedReader(new FileReader("demo.txt"))) {
String line;
// 核心:readLine() 按行读取,一行一个字符串
((line = br.readLine()) != ) {
System.out.println( + line);
}
} (IOException e) {
System.err.println( + e.getMessage());
e.printStackTrace();
}
}
}

