2013-02-19 115 views
3

最后一行不包含任何内容,但它不返回null。代码如下BufferedReader不在最后一行返回null

当使用Eclipse调试,我看到了在调试模式下line= "",我该如何防止这种情况发生

BufferedReader br = new BufferedReader(new FileReader(file)); 
String line; 
while ((line = br.readLine()) != null) { 
    // process the line. 
} 
br.close(); 
+1

在文件的最后一行末尾是否有换行符? – jlordo 2013-02-19 15:35:39

+1

如果您正在使用Java SE 7,请考虑使用新的自动资源管理功能来管理您的流。 – Puce 2013-02-19 15:40:28

+0

请考虑阅读[javadoc](http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()) – 2013-02-19 15:42:38

回答

4

使用BufferedReader.readLine当它到达文件的末尾()方法返回null 。

您的程序在到达文件末尾之前似乎是在文件中读取行。终止的条件是该行为空,空字符串不为空,因此它循环并不会终止。

+1

我认为OP意识到这一点。你的回答需要解释为什么'null'没有被返回(即因为文件末尾有空行)。 – 2013-02-19 15:37:10

+0

@DuncanJones编辑我的答案。谢谢 – 2013-02-19 15:45:19

2

如果行包含单行换行line将为空String,但readLine不会返回空值。一旦到达文件末尾,readLine只返回null。

6

您不会阻止它发生,空行是一行,因此它将按原样返回。

你可以做的是检查,如果该行是处理之前空:

BufferedReader br = new BufferedReader(new FileReader(file)); 
String line; 
while ((line = br.readLine()) != null) { 
    if (!line.isEmpty()) { 
     // process the line. 
    } 
} 
br.close(); 
+0

写这个完全相同的答案。 +1 – aglassman 2013-02-19 15:37:15

+1

基本上是一个正确答案,但患有与原始帖子相同的问题。使用新的自动资源管理功能来管理您的流或在finally块中正确关闭它们。 – Puce 2013-02-19 15:43:18

2

nulll =什么。 “ ”“=空。 如果最后一行为空,则为“”。以下行应该为空。

从那里你可以测试空白(我喜欢appache的StringUtils isEmpty)或从处理前的文件中删除最后\ n。

相关问题