web-dev-qa-db-ja.com

StringWriterからtxtファイルへの書き込み

私はStringWriter変数swを持っています。これは、FreeMarkerテンプレートによって入力されます。 swにデータを入力したら、どうすればテキストファイルに印刷できますか?

次のようなforループがあります。

for(2 times)
{
    template.process(data, sw);
    out.println(sw.toString());
}

現在、画面に出力しているだけです。ファイルに対してこれを行うにはどうすればよいですか?ループごとにswが変更されると思いますが、各ループのデータをファイルに追加したいと思います。

編集:以下のコードを試しました。実行すると、file.txtが変更されましたが、リロードしてもファイルには何も含まれていません。

sw.append("CheckText");
PrintWriter out = new PrintWriter("file.txt");
out.println(sw.toString());
8
user1460557

どうですか

_FileWriter fw = new FileWriter("file.txt");
StringWriter sw = new StringWriter();
sw.write("some content...");
fw.write(sw.toString());
fw.close();
_

また、最初にStringWriterに書き込んでからファイルに書き込む代わりに、template.process(data, os);に直接渡すことができる出力ストリームの使用を検討することもできます。

template.process(...)のAPIドキュメントを調べて、そのような機能が利用可能かどうかを確認してください。

返信2

template.process(Object, Writer)はFileWriterオブジェクトを受け取ることもでき、witchはWriterのサブクラスであるため、おそらく次のようなことができます。

_FileWriter fw = new FileWriter("file.txt");    
for(2 times)
{
    template.process(data, fw);
}
fw.close();
_
15
A4L

さまざまなストリームを使用してファイルに書き込むことができます。

私は個人的にPrintWriterhere で作業するのが好きです。FileWriterで追加するフラグを立てることができます(次の例ではtrue)。

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("outfilename", true)));
    out.println(sw.toString());
    out.close();
} catch (IOException e) {
    // Do something
}
2
La bla bla

Apacheコモンズを使用してもかまわない場合IO:

FileUtils.write(new File("file.txt"), sw.toString(), /*append:*/ true);
1
user1075613

FileWriter を使用しないのはなぜですか?

ループする前に開いて、必要な出力を生成します。 FileWriterに書き込むと、バッファに追加され、蓄積された出力がclose()に書き出されます。

FileWriterはoverwriteまたはappendモードで開くことができることに注意してください。既存のファイルに追加できます。

これが 簡単なチュートリアル です。

1
Brian Agnew