【问题标题】:java append to filejava附加到文件
【发布时间】:2010-09-27 01:16:24
【问题描述】:

我用谷歌搜索了一段时间,但似乎找不到它,应该很容易。我想将 CR 附加到我使用 Transformer 创建的 XML 文件的末尾。有没有办法做到这一点>

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


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();

【问题讨论】:

    标签: java xml xslt jaxp transformer


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这里有几个选项。

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

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

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

      【讨论】:

        【解决方案3】:

        显而易见的答案是将 StreamResult 与 Writer 一起使用,并在关闭之前将您的角色附加到 writer。

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

        【讨论】:

        • 将 Writer 与 XML 库一起使用通常会导致麻烦,因为转换器无法发现 Writer 编码以正确设置嵌入在 XML 中的编码属性。请改用 OutputStream。
        【解决方案4】:

        我不知道这个 Transformer 类。但是我发现您的 writer/file 变量和 xformer/source/result 变量之间没有任何联系...看起来您只写了一个换行符。
        除非你省略了一些重要的部分。

        【讨论】:

        • 它将是 jaxp 中的 Transformer 类。
        【解决方案5】:

        请注意,请确保您使用与 xml 序列化相同的字符编码来编写换行符,否则您的文件将被破坏。

        【讨论】:

          猜你喜欢
          • 2011-01-14
          • 1970-01-01
          • 2016-04-08
          • 2023-04-06
          • 2010-12-20
          • 2015-04-11
          • 2012-03-07
          • 2018-12-06
          相关资源
          最近更新 更多