2010-07-27 59 views
0
從一個文件,

林讀取值存儲在一個HashMap這些值,使用一個BufferedReader,以下面的方式 -java的散列映射查詢

while((String str=buffread.readLine()).length()>1) 
      { 
       hashMap.put(str.substring(0,5),str); 

      } 

我還可以驗證的散列映射具有最初的所有數據出現在文件中。

現在,我試着去精確HashMap中的值寫入到另一個文件中按以下方式 -

FileWriter outFile = new FileWriter("file path"); 
     PrintWriter out = new PrintWriter(outFile); 
     Set entries = hashMap.entrySet(); 
      Iterator entryIter = entries.iterator(); 
      while (entryIter.hasNext()) { 
      Map.Entry entry = (Map.Entry)entryIter.next(); 
      Object value = entry.getValue(); // Get the value. 
      out.println(value.toString()); 
      } 

但這似乎寫較少數量的條目到文件比hashMap1.size()或基本價值,它最初從源文件中讀取的條目數。

雖然我有一個預感,因爲Printwriter和filewriter,如果有人可以指出我爲什麼會發生這個問題,這將是很大的幫助。

問候 p1nG

回答

2

也許您已將此代碼從您發佈的代碼中刪除,但在完成這些操作後,您是否明確地在PrintWriter/FileWriter對象上調用了flush()close()

每次調用println()不一定會導致將某行寫入底層OutputStream /文件。

+0

我的壞,傻傻傻:D – ping 2010-07-28 08:39:49

-1

你並不需要在這一點上的迭代器,只需使用一個密鑰集在迭代這個

Set<String> keys = hashMap.keySet(); 
for(String key : keys){ 
out.println(hashMap.get(key)); 
} 

應該這樣做。

+0

這是否意味着使用迭代器可能會導致該問題? – ping 2010-07-27 19:12:14

+0

這是效率低下,因爲你1)迭代關鍵2)然後做一個關鍵的查找。當您想要訪問'key'和'value'時,'entrySet()'是迭代Map的更有效方法。除非你的意思是可以迭代'values()'? – 2010-07-27 19:22:35

+0

那麼ping只是返回輸入值。所以我的猜測是這樣的。 – onigunn 2010-07-27 19:56:27

2

除非在源文件中的每一行的第5個字符是唯一的,這條線

hashMap.put(str.substring(0,5),str); 

將確保您在覆蓋地圖的某些條目。

+0

是的,它們在源文件中是唯一的。 – ping 2010-07-27 19:05:53

+0

你完全可以肯定嗎?對'hashMap.containsKey(str.substring(0,5))'拋出警告的完整性檢查可能值得添加。 – BlairHippo 2010-07-27 19:17:13

+0

我對此很樂觀。它們基本上就像私人鑰匙。我相信他們是獨一無二的。 – ping 2010-07-27 19:27:04

1

有一種可能性,即寫入文件當事情失敗:

方法在此(PrintWriter)類不會拋出I/O異常。客戶可以通過調用checkError()來查詢是否發生了錯誤。

一般來說,我認爲這不是HashMap的問題,正如您所說的數據被正確讀取。

0

您無法使用該代碼正確讀取文件。除非你喜歡捕獲NullPointerExceptions,否則你必須先檢查readLine()的結果爲null。