簡體   English   中英

共同點io FileUtils.writeStringToFile

[英]commons io FileUtils.writeStringToFile

我有一個用Java編寫的程序,它讀取兩個屬性文件-source.properties和destination.properties,並寫出從源到目標的每一行的鍵/值對。 我決定使用apache commons io api的FileUtils.writeStringToFile方法,而不是Java標准api的PrintWriter或FileWriter。 我發現只有源文件中的最后一行被覆蓋到目標文件。

source.properties的內容
用戶名= a
主機= abc

destination.properties的內容
主機= abc

  static void writeToFile(Map<String,String> map, String pathToFile)    {                                 
    Iterator<Map.Entry<String,String>> itr = map.entrySet().iterator();
    File path = new File(pathToFile);
    while(itr.hasNext())    {
        Map.Entry<String,String> pairs = (Map.Entry<String,String>)itr.next();
        FileUtils.writeStringToFile(path,pairs.getKey() + "=" + pairs.getValue());
    }
}

映射包含源文件中的鍵/值對。 當我調試程序時,我能夠看到while循環經歷了兩次,並且map包含了所有正確的數據,而FileUtils的方法被調用了兩次,並寫入了源文件中的每一行數據。

有人可以向我解釋為什么我得到上述輸出嗎?

[更新]
我能夠實現使用PrintWriter所需的功能。

您必須使用FileUtils#writeStringToFile並將boolean參數設置為true以告訴utils方法應將String附加到文件末尾而不覆蓋它。

@Deprecated
public static void writeStringToFile(File file,
                            String data,
                            boolean append)
                          throws IOException

因此,您的代碼應如下所示:

static void writeToFile(Map<String,String> map, String pathToFile)
{                                 
  Iterator<Map.Entry<String,String>> itr = map.entrySet().iterator();
  File path = new File(pathToFile);
  while(itr.hasNext())    {
    Map.Entry<String,String> pairs = (Map.Entry<String,String>)itr.next();
    FileUtils.writeStringToFile(path,
      pairs.getKey() + "=" + pairs.getValue(), 
      true);// append rather than overwrite
  }
}

旁注:不建議使用此方法,您應使用方法簽名中指定了Charset的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM