BufferedReader的readLine()用于高效按行读取文本,返回不含换行符的字符串,末尾返回null;推荐用try-with-resources自动关闭资源,注意指定字符集防乱码,空行返回""而非null。

BufferedReader 的 readLine() 方法是 Java 中高效按行读取文本的常用方式,它会一次读取一整行(不包含换行符),返回字符串;到达文件末尾时返回 null。
基本用法:配合 try-with-resources 自动关闭资源
推荐使用 try-with-resources 语句,确保 BufferedReader 和底层 InputStream/Reader 正确关闭:
- 先用
FileReader或InputStreamReader包装文件或字节流 - 再用
BufferedReader包装它,获得带缓冲的读取能力 - 在
while ((line = reader.readLine()) != null)循环中逐行处理
示例代码:
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 的行为细节
readLine() 会自动识别不同平台的换行符(\n、\r、\r\n),并返回不含换行符的纯文本内容:
- 空行返回空字符串
"",不是null - 文件末尾无换行符时,最后一行仍能正常读出
- 遇到 I/O 异常(如磁盘损坏)会抛出
IOException,需捕获处理
从网络或标准输入读取时的写法
读取 System.in 或 HTTP 响应体等流时,同样适用:
- 标准输入:
new BufferedReader(new InputStreamReader(System.in)) - HTTP 响应:
new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))(注意指定字符集) - 建议显式指定编码(如
"UTF-8"),避免乱码,尤其处理中文时
常见错误与规避方式
容易忽略但影响健壮性的点:
- 忘记关闭流 → 用 try-with-resources 替代手动
close() - 未处理
IOException→ 必须捕获或声明抛出 - 误判空行:用
line == null判断结束,不要用line.isEmpty()来判断 EOF - 编码不一致导致中文乱码 → 构造
InputStreamReader时传入正确字符集










