![](/img/trans.png)
[英]What is the alternative to deprecated the FileUtils.writeStringToFile method?
[英]commons io FileUtils.writeStringToFile
我有一個用Java編寫的程序,它讀取兩個屬性文件-source.properties和destination.properties,並寫出從源到目標的每一行的鍵/值對。 我決定使用apache commons io api的FileUtils.writeStringToFile方法,而不是Java標准api的PrintWriter或FileWriter。 我發現只有源文件中的最后一行被覆蓋到目標文件。
source.properties的內容
用戶名= a
主機= abcdestination.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.