2012-12-22 71 views
-3

我正在使用FileWriter在java中寫入文件,但它的行爲很奇怪。FileWriter不寫入文件java

try 
{ 
    newFile = new File(typeOfData); 
    if (!newFile.exists()) 
    { 
     newFile.createNewFile(); 
     writer = new FileWriter(newFile); 

     for (Map<String, Double> tfidf : tfidfs) 
     { 
      Set<String> keys = tfidf.keySet(); 
      Iterator<String> iterator = keys.iterator(); 

      //int i = 1; 
      while(iterator.hasNext()) 
      { 
       String featureValue = iterator.next() + ":" + tfidf.get(iterator.next()) + " "; 
       //System.out.print(featureValue); 
       writer.write(featureValue); 

       //i++; 
      } 
      writer.write("\n"); 
      //System.out.println(); 
      writer.flush(); 
     } 
     //writer.flush(); 
     writer.close(); 
    } 
} 

在while循環,如果,而不是iterator.next(),我使用變量int i = 1i++它寫就好了,所有的價值觀和一切。但是當我使用這段代碼時,它只是創建一個沒有任何內容的空白文件。我不明白爲什麼會發生這種情況。有什麼建議麼?

+1

你可以在* iterator.next()*中調用兩次循環,希望你可以確保有一些元素可以迭代。 – MrSmith42

回答

4
String featureValue = iterator.next() + ":" + tfidf.get(iterator.next()) + " "; 

你剛纔叫next()兩次,從Set獲得兩個鍵。您的結果String featureValue將包含第一個鍵和第二個鍵的值。

String key = iterator.next(); 
String featureValue = key + ":" + tfidf.get(key) + " "; 

編輯補充:然後作爲一個猜測,爲什麼你現在有沒有輸出...你有一個奇數在結束鍵,當沒有對一個關鍵左第二個next(),它拋出了一個異常(我猜你會忽略),你不會沖洗該文件,並且你沒有輸出。如果你有一個偶數的鍵...它實際上會「工作」,你只需要一個文件,你只需要一半的行;

+0

ummmm不,不是第一次我把它叫做即時通訊密鑰..第二次我打電話給我即時獲得該密鑰的價值 – Haseeb

+2

不......你從你的設置*中獲得兩個密鑰。所以你實際上最終得到的是第一個關鍵字,它是你的結果'String featureValue'中的第二個值。 –

+2

最後,當沒有關鍵字時,它會拋出一個異常(我猜你會忽略這個異常),你不會沖洗該文件,也不會得到輸出。 –