代码之家  ›  专栏  ›  技术社区  ›  Erik

java追加到文件

  •  3
  • Erik  · 技术社区  · 17 年前

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

    我尝试了以下操作,但结果是一个空白文件?

    
    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();
    5 回复  |  直到 17 年前
        1
  •  9
  •   itsadok    17 年前

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

        new FileOutputStream(f, true /* append */);
    
        2
  •  5
  •   erickson    17 年前

    这里有几个选择。

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

    如果你想重新打开文件,如问题所示,你需要使用 文件输出流 接受可选参数的构造函数 append 争论。将其设置为 true 为了避免破坏刚刚完成的转换的结果。

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

        3
  •  1
  •   Tom Hawtin - tackline    17 年前

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

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

        4
  •  0
  •   PhiLho    17 年前

    我不知道这个变压器类。但我看不出writer/file变量和xformer/source/result变量之间有什么联系。..看起来你只写换行符。
    除非你遗漏了一些关键部分。

        5
  •  0
  •   James James    17 年前

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