2013-02-19 99 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。

相關問題