Apache FileUtils.writeLines()が存在する場合、ファイルに追加することができます
-
06-07-2019 - |
質問
The commons FileUtils とてもクールに見えますが、ファイルに追加できないとは信じられません。
File file = new File(path);
FileUtils.writeLines(file, printStats(new DateTime(), headerRequired));
上記はファイルの内容を毎回置き換えるだけであり、このコードのように終了するようにタグ付けを続けたいと思います。
fw = new FileWriter(file, true);
try{
for(String line : printStats(new DateTime(), headerRequired)){
fw.write(line + "\n");
}
}
finally{
fw.close();
}
javadocを検索しましたが、何も見つかりませんでした!何が足りないのですか?
解決
IOUtils.writeLines()、2番目の例のように初期化できるWriterオブジェクトを受け取ります。
他のヒント
それらは、FileUtilsクラスのappendString(...)のようなメソッドになりました。
しかし、 FileUtils.openOutputStream(...)からOutputstreamを取得し、
を使用して書き込むことができますwrite(byte[] b, int off, int len)
オフにすることで、ファイルに追加することができます。
編集
Davidsの回答を読んだ後、BufferedWriterがこの仕事をすることを認識しました
BufferedWriter output = new BufferedWriter(new FileWriter(simFile));
output.append(text);
Apache FileUtils 2.1以降、次のメソッドがあります:
static void write(ファイルファイル、CharSequenceデータ、ブール値の追加)
FileUtils.writelines()にはオーバーロードがあり、追加するかどうかのパラメーターを受け取ります。
public static void writeLines(File file,
Collection<?> lines,
boolean append)
throws IOException
file-書き込むファイル
lines-書き込む行、nullエントリは空白行を生成します
append-trueの場合、上書きせずにファイルの最後に行が追加されます
ケース1:
FileUtils.writeLine(file_to_write, "line 1");
FileUtils.writeLine(file_to_write, "line 2");
file_to_writeには以下のみが含まれます
line 2
最初に同じファイルに複数回書き込むと、ファイルが上書きされます。
ケース2:
FileUtils.writeLine(file_to_write, "line 1");
FileUtils.writeLine(file_to_write, "line 2", true);
file_to_writeには次が含まれます
line 1
line 2
2回目の呼び出しで同じファイルに追加されます。
詳細については、Java公式ドキュメントを参照してください。 https ://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeLines(java.io.File 、java.util.Collection、boolean)
次のようなことができます
List x = FileUtils.readLines(file);
x.add(String)
FileUtils.writelines(file,x);