11

swFreeMarker テンプレートによって入力されるStringWriter 変数があります。にデータを入力したら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());
4

4 に答える 4

19

どうですか

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

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

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

返信 2

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

FileWriter fw = new FileWriter("file.txt");    
for(2 times)
{
    template.process(data, fw);
}
fw.close();
于 2012-08-09T12:23:37.400 に答える
2

ファイルへの書き込みには、さまざまなストリームを使用できます。

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

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("outfilename", true)));
    out.println(sw.toString());
    out.close();
} catch (IOException e) {
    // Do something
}
于 2012-08-09T12:27:39.387 に答える
1

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

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

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

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

于 2012-08-09T12:22:03.960 に答える