2012-12-22 72 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

最后,当没有关键字时,它会抛出一个异常(我猜你会忽略这个异常),你不会冲洗该文件,也不会得到输出。 –