Java中BufferedReader的readLine()读取结果为null的原因排查
为什么BufferedReader的readLine()返回null?
嘿,我来帮你拆解下这个问题——readLine()返回null本质上只有一个核心原因:已经读到了输入流的末尾(也就是EOF,文件结束标记),但具体触发的场景有这几种,咱们挨个看:
- 目标文件本身是空的:如果你的
D:\\db.txt是个完全空的文件,里面一行内容都没有,那第一次调用readLine()直接就碰到文件末尾,自然返回null。你可以先手动打开这个文件确认下是不是真的没内容。 - 流已经被读到过末尾:虽然你现在只调用了一次
readLine(),但如果之前有其他代码打开过这个文件的流,并且已经读到过末尾,又没正确关闭流的话,可能会影响当前的读取(不过这种情况比较少见,大概率还是文件本身的问题)。 - 顺带提一句:如果是文件路径写错了或者没有读取权限,那
FileReader初始化的时候就会直接抛出FileNotFoundException,根本不会走到readLine()这一步,所以这个情况可以直接排除。
给你个实用的小建议:读取文件内容的时候,最好用循环来处理,直到readLine()返回null就停止,同时记得用try-with-resources语法自动关闭流(避免资源泄漏),示例代码如下:
try (FileReader fr = new FileReader("D:\\db.txt"); BufferedReader br = new BufferedReader(fr)) { String str; // 循环读取直到到达文件末尾 while ((str = br.readLine()) != null) { // 这里处理每一行的内容,比如打印出来 System.out.println(str); } } catch (IOException e) { // 捕获并处理IO异常 e.printStackTrace(); }
这样既安全又能正确处理所有文件内容,还不会因为流没关闭留下隐患。
内容的提问来源于stack exchange,提问作者siyuan
相关产品推荐
相关产品推荐

