11

我有一个sw由 FreeMarker 模板填充的 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-doctemplate.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 回答
1

如果您不介意使用 Apache commons IO :

FileUtils.write(new File("file.txt"), sw.toString(), /*append:*/ true);
于 2018-05-24T16:18:10.777 回答