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 编译测试。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/29882.html