2008-12-15 106 views
3

我GOOGLE了这一段时间,但似乎无法找到它,它应该很容易。我想追加一个CR,然后结束使用Transformer创建的XML文件。有没有办法做到这一点>java追加到文件

我试过以下,但这导致了一个空白文件?


Transformer xformer = TransformerFactory.newInstance().newTransformer(); 
xformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "file:///ReportWiz.dtd"); 
xformer.transform(source, result); 
OutputStream writer = new FileOutputStream(file); 
Byte b = '\n'; 
writer.write(b); 
writer.close();

回答

10

简单...只需添加append选项:

new FileOutputStream(f, true /* append */); 
0

我不知道这个Transformer类。但是我发现你的编写器/文件变量和你的xformer/source/result变量之间没有联系......看起来你只写了一个换行符。
除非你省略了一些基本部分。

+0

这将是jaxp中的Transformer类。 – 2008-12-15 21:40:18

1

显而易见的答案是在Writer中使用StreamResult,并在关闭之前将您的角色附加到作者身上。

您似乎试图重新打开该文件以追加该字符。 FileOutputStream构造函数的两个参数形式包含一个附加标志。

+1

使用带有XML库的Writer通常会导致麻烦,因为变换器无法发现Writer编码,以便正确设置嵌入在XML中的编码属性。改用OutputStream。 – erickson 2008-12-15 21:44:05

5

这里有几个选项。

我假设你的结果是StreamResult,你用String来创建,指定目标文件路径。你可以考虑自己打开一个FileOutputStream,然后用它来构建你的StreamResult。然后,当变压器完成后,附加行终止符,刷新并关闭流。如果没有其他限制,我会使用这种方法。

如果您想要重新打开该文件,如问题所示,您需要使用一个采用可选append参数的构造函数FileOutputStream。将其设置为true以避免破坏刚刚完成的转换结果。

您也可以探索在变换中设置indent输出属性,或直接在模板中包含必要的行终止符。

0

一个音符,请确保您编写使用编码您使用的XML serializaton,或者您的文件将被打破相同的字符的换行符。