优先选 BufferedReader 而非 Scanner 进行纯文本逐行读取,因其默认 8192 字节缓冲区减少 I/O 调用,无类型转换与正则解析开销,性能高 2–5 倍,适合日志、CSV 等大文件处理。

BufferedReader 的 readLine() 方法是 Java 中按行读取文本最常用、最高效的方式,它会自动处理换行符(\n、 或 <code>\r),返回不带换行符的字符串;遇到文件末尾时返回 null。
基本用法:配合 try-with-resources 自动关闭
推荐始终使用 try-with-resources 语句,确保流正确关闭,避免资源泄漏:
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line); // 每次读取一行,不含换行符
}
} catch (IOException e) {
e.printStackTrace();
}
- 每次调用
readLine()返回下一行内容(不含\n或\r\n) - 返回
null表示已到达文件末尾,这是循环终止的关键条件 - 不要在循环内重复创建
BufferedReader,否则会跳过数据或抛出异常
从标准输入读取(如控制台)
搭配 InputStreamReader 可读取用户输入:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("请输入一行:");
String input = reader.readLine(); // 阻塞等待用户回车
System.out.println("你输入了:" + input);
}
- 用户按下 Enter 后,
readLine()才返回该行内容 - 空行会返回空字符串
"",不是null - 若输入流被关闭(如 Ctrl+D / Ctrl+Z),
readLine()返回null
注意点:null 判断不能省略
忘记检查 null 是常见错误,会导致 NullPointerException:
立即学习“Java免费学习笔记(深入)”;
- ❌ 错误写法:
while (reader.readLine().length() > 0)—— 多次调用readLine()会跳行 - ✅ 正确写法:先赋值再判断,保证每行只读一次
-
readLine()不抛出NullPointerException,但返回值可能为null,必须显式判断
性能优势:为什么用 BufferedReader 而不是 Scanner
当纯文本按行读取且无需解析结构化数据时,BufferedReader 更轻量、更快:
- 内部默认缓冲区大小为 8192 字节,减少底层 I/O 调用次数
- 不做类型转换、分词或正则匹配,开销远低于
Scanner - 适合大文件逐行处理(如日志分析、CSV 行解析等)

















