0

source.properties と destination.properties の 2 つのプロパティ ファイルを読み取り、ソースから宛先に各行のキーと値のペアを書き込む Java で記述されたプログラムがあります。Java 標準 API の PrintWriter または FileWriter の代わりに、Apache commons io API の FileUtils.writeStringToFile メソッドを使用することにしました。私が見つけたのは、ソース ファイルの最後の行だけが宛先ファイルに上書きされていることです。

source.properties の内容
username=a
host=abc

destination.properties の内容
host=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());
    }
}

map には、ソース ファイルからのキーと値のペアが含まれています。プログラムをデバッグすると、while ループが 2 回通過し、map にすべての正しいデータが含まれ、FileUtils のメソッドが 2 回呼び出され、ソース ファイルから各行のデータが書き込まれることがわかりました。

前述の出力が得られる理由を誰かに説明してもらえますか?

[更新]
PrintWriter を使用して、私が望んでいたことを達成することができました。

4

1 に答える 1

3

ファイルの最後に追加し、上書きしないように utils メソッドに伝えるにはFileUtils#writeStringToFile、ブール引数を に設定して を使用する必要があります。trueString

@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、メソッド シグネチャで指定されたものを使用する必要があります。

于 2014-05-23T13:51:17.870 に答える