在Java中,
readLine()方法通常通过
BufferedReader类调用,用于逐行读取文本输入流(如文件或网络数据),使用时需先创建
BufferedReader实例包裹输入流,调用
readLine()返回字符串行(末尾不含换行符),读取完毕返回
null,必须处理
IOException并最终关闭流资源。
Java 中的 readLine() 方法是用于逐行读取文本数据的核心方法,它属于 BufferedReader 类,下面详细介绍其使用方法和注意事项,结合代码示例说明。
readLine() 的作用和原理
-
功能:
从输入流(如文件、网络连接)中读取一行文本,返回String类型(不包含行终止符n或rn)。
当读到文件末尾时返回null。 -
所属类:
java.io.BufferedReader.readLine()
通过BufferedReader包装其他流(如FileReader、InputStreamReader),能大幅提升读取效率(减少磁盘 I/O 操作)。
完整使用步骤(含代码)
场景:读取文本文件内容
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadLineExample {
public static void main(String[] args) {
// 1. 定义文件路径
String filePath = "test.txt";
// 2. 使用 try-with-resources 自动关闭资源(Java 7+)
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
// 3. 逐行读取直到返回 null
while ((line = reader.readLine()) != null) {
System.out.println(line); // 处理每一行数据
}
} catch (IOException e) {
// 4. 异常处理(文件不存在/读取错误)
System.err.println("读取文件失败: " + e.getMessage());
}
}
}
关键代码解析:
BufferedReader reader = new BufferedReader(new FileReader("test.txt")):
用BufferedReader包装FileReader,提升读取效率。while ((line = reader.readLine()) != null):
循环读取每一行,直到文件末尾。try-with-resources:
自动调用reader.close(),避免资源泄漏(必须关闭流!)。
其他常见使用场景
示例 1:读取控制台输入(System.in)
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("请输入内容: ");
String input = reader.readLine(); // 等待用户输入一行
System.out.println("您输入的是: " + input);
} catch (IOException e) {
e.printStackTrace();
}
示例 2:读取网络数据(Socket)
try (Socket socket = new Socket("example.com", 80);
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream())
)) {
String responseLine;
while ((responseLine = reader.readLine()) != null) {
System.out.println(responseLine); // 输出服务器响应
}
} catch (IOException e) {
// 处理异常
}
注意事项与常见问题
-
资源关闭:
必须用try-with-resources或finally块关闭流,否则会导致文件句柄泄漏。 -
字符编码问题:
如果文件编码不是系统默认(如 UTF-8),需指定编码:
BufferedReader reader = new BufferedReader( new InputStreamReader(new FileInputStream("data.txt"), StandardCharsets.UTF_8) ); -
性能优化:
- 大文件读取优先用
BufferedReader(默认缓冲区 8KB)。 - 避免在循环中重复创建
BufferedReader。
- 大文件读取优先用
-
空行处理:
readLine()遇到空行时返回空字符串 (非null),需额外判断:
while ((line = reader.readLine()) != null) { if (!line.trim().isEmpty()) { // 跳过空行 // 处理非空行 } } -
常见错误:
FileNotFoundException:文件路径错误或权限不足。IOException:读取过程中断(如磁盘损坏)。- 忘记检查
null:导致循环无限执行。
最佳实践
- 始终用 try-with-resources:确保资源释放,代码更简洁。
- 指定字符编码:避免中文乱码问题。
- 处理大文件时:结合流式处理(如
Files.lines()),避免内存溢出:Files.lines(Paths.get("largefile.txt"), StandardCharsets.UTF_8) .forEach(System.out::println);
引用说明参考 Oracle 官方文档 BufferedReader (Java SE 17),结合实践经验编写,代码示例遵循 Java 编码规范,已通过 JDK 17 编译测试。
