私は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());
どうですか
_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ドキュメントを調べて、そのような機能が利用可能かどうかを確認してください。
template.process(Object, Writer)
はFileWriterオブジェクトを受け取ることもでき、witchはWriterのサブクラスであるため、おそらく次のようなことができます。
_FileWriter fw = new FileWriter("file.txt");
for(2 times)
{
template.process(data, fw);
}
fw.close();
_
さまざまなストリームを使用してファイルに書き込むことができます。
私は個人的にPrintWriter
here で作業するのが好きです。FileWriterで追加するフラグを立てることができます(次の例ではtrue)。
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("outfilename", true)));
out.println(sw.toString());
out.close();
} catch (IOException e) {
// Do something
}
Apacheコモンズを使用してもかまわない場合IO:
FileUtils.write(new File("file.txt"), sw.toString(), /*append:*/ true);
FileWriter を使用しないのはなぜですか?
ループする前に開いて、必要な出力を生成します。 FileWriterに書き込むと、バッファに追加され、蓄積された出力がclose()
に書き出されます。
FileWriterはoverwriteまたはappendモードで開くことができることに注意してください。既存のファイルに追加できます。
これが 簡単なチュートリアル です。