2013-04-29 131 views
1

如果你有一個文本文件:爲什麼文本文件中的空行導致java.util.NoSuchElementException?

AAA:123:123:AAAA 
BBB:456:456:BBBB 

起初,當出現在文本文件中沒有空白行,你閱讀和檢索數據。一切安好。

當你將文件寫入到一個新的文件,並替換數據或更新

AAA:9993:9993:AAAA 
BBB:456:456:BBBB 
-------- This is a blank line----------- 

發生這種情況後,NoSuchElementException異常會彈出。如果未刪除空白行,則該錯誤將始終彈出。

try { 
File fileCI = new File("CI.txt"); 
FileWriter fileWriter = new FileWriter(fileCI); 
BufferedWriter bw = new BufferedWriter(fileWriter); 

for (Customer ci : custList){ 
if (inputUser.equals(ci.getUserName()) && inputPass.equals(ci.getPassword())) { 
    ci.setCardNo(newCardNo); 
    ci.setCardType(newCardType); 
} 
    String text = ci.getRealName() + ";" + ci.getUserName() + ";" + ci.getPassword() + ";" + ci.getAddress() + ";" + ci.getContact() + ";" + ci.getcardType() + ";" + ci.getcardNo() + System.getProperty("line.separator");         
    bw.write(text); 
} 
    bw.close(); 
    fileWriter.close(); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 

如果我不添加System.getProperty(「line.separator」);字符串將被添加,並且所有內容都將被組合在一起,而不需要新的分隔符。但是這個分隔符在文本文件的末尾添加了一個空白行。有什麼我可以做,以避免這個問題?

我應該在我讀文件的地方解決嗎?或者在我將文件寫入新文件的地方解決它。

try { 
     Scanner read = new Scanner(file); 

     read.useDelimiter(";|\n"); 
     String tmp = ""; 
     while (read.hasNextLine()){ 
      if (read.hasNext()){ 
       custList.add(new Customer(read.next(), read.next(), read.next(), read.next(), read.next(), read.next(), read.next())); 
      } else { 
       break; 
      } 
     } 
     read.close(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 

編輯:這上面的閱讀現在完美的作品!

回答

1

我想你到達的文件(EOF)沒有剩餘的行,你仍然在嘗試讀取行的末尾。所以你得到NoSuchElementException(如果沒有找到行)。

試試這個:

String tmp=""; 
while (reader.hasNextLine()){ 
    tmp = s.nextLine(); 
    // then do something 

} 

我想你沒有在分隔符使用\n。由於我們使用scanner.hasNextLine()。如果你想使用scanner.next()。然後

read.useDelimiter(";|\n"); 

上面的行應該是:

read.useDelimiter(";|\\n");// use escape character. 

和LOOP這種方式。

while(s.hasNext()){ 
    //do something. 
} 
+0

那麼,如何讓閱讀文件知道它的EOF,而不是嘗試和檢索更多的信息呢? – John 2013-04-29 13:02:18

+0

@John看到我上面的答案。 – 2013-04-29 13:10:05

+0

看看我編輯過的帖子..我是這麼做的嗎?而我得到的是..我只插入中間部分,但不是第一和第三行 – John 2013-04-29 13:18:24

相關問題