bufferedreader 是 java 中高效按行读取字符流的类,核心方法 readline() 返回去换行符的字符串,末尾返回 null;推荐用 files.newbufferedreader 指定 utf-8 编码并配合 try-with-resources 管理资源。

BufferedReader 是 Java 中高效读取字符流的常用类,特别适合按行读取文本文件。它的核心方法是 readLine(),每次调用返回一行内容(不带换行符),读到末尾时返回 null。
基本用法:配合 FileReader 使用
最常见的方式是用 FileReader 包装文件,再用 BufferedReader 缓冲它:
- 确保文件路径正确,且有读取权限
- 推荐使用 try-with-resources 自动关闭资源,避免泄漏
-
readLine()返回的是去掉换行符(\n、\r\n 或 \r)的字符串
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();
}
读取其他来源的文本(如网络流、标准输入)
BufferedReader 不限于文件,只要提供 Reader 子类即可:
- 读取控制台输入:
new BufferedReader(new InputStreamReader(System.in)) - 读取网络响应流(如
HttpURLConnection.getInputStream()) - 读取字符串内容:
new BufferedReader(new StringReader("第一行\n第二行"))
注意编码问题(尤其中文乱码)
FileReader 默认使用平台编码(Windows 常为 GBK),容易导致中文乱码。更稳妥的做法是显式指定编码:
- 用
InputStreamReader包装FileInputStream,并传入编码名(如 "UTF-8") - Java 11+ 可直接用
Files.newBufferedReader(Paths.get("file.txt"), StandardCharsets.UTF_8)
try (BufferedReader reader = Files.newBufferedReader(Paths.get("data.txt"), StandardCharsets.UTF_8)) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
性能与边界情况提醒
BufferedReader 内部默认缓冲区大小为 8192 字符,一般足够。但要注意:
- 空行会返回空字符串
"",不是null - 最后一行若无换行符,仍会被正常读取
- 不要在循环中重复创建
BufferedReader,应复用实例 - 如果需同时读取和解析(如 CSV、JSON),考虑专用库(如 OpenCSV、Jackson)更可靠
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











