【问题标题】:How do I append some text at the end of a file using Ant?如何使用 Ant 在文件末尾附加一些文本?
【发布时间】:2011-04-13 13:16:21
【问题描述】:

在我的项目的一个配置文件中,我需要附加一些文本。 我正在寻找一些使用 Ant 执行此操作的选项。

我找到了一个选项 - 查找某些内容并将该文本替换为新文本和旧值。 但这似乎并不乐观,好像将来有人更改原始文件会导致构建失败。

所以,我希望我的脚本在文件末尾添加文本。

对于这样的要求,我有什么选择?

【问题讨论】:

标签: ant append


【解决方案1】:

使用echo 任务:

<echo file="file.txt" append="true">Hello World</echo>

编辑:如果您有 HTML(或其他任意 XML),您应该使用 CDATA 转义它:

<echo file="file.txt" append="true">
<![CDATA[
  <h1>Hello World</h1>
]]>
</echo>

【讨论】:

  • 嗨,我的文本是一个 HTML 模板,这个任务似乎不适用于模板文本。 :( 。怎么办?
  • 一个问题,替换文本后,编码被更改,所有更改的内容都放在一行中,中间有一些空格字符。我无法在记事本、editplus 中正确查看文件。但在写字板中看起来不错。这对 java 程序可以吗?
  • 这可能与 ant (build.xml) 文件的字符编码、默认系统编码以及传递给 &lt;echo&gt;encoding 属性的任何组合有关任务。它很可能将单个回车符 (CR) 编写为换行符,而不是 Windows 上的标准 CR+LF。无论如何,行尾在 HTML 中都会被忽略,所以希望它实际上并不重要,但这完全取决于您的 Java 程序对相关文件的处理。
【解决方案2】:

另一种选择是使用filterchain

例如,以下将文件input2.txt 附加到input1.txt 并将结果写入output.txt。当前操作系统的行分隔符(来自 ant 中可用的java properties)在输出文件中使用。我猜在使用它之前,您必须即时创建output2.txt

<copy file="input1.txt" tofile="output.txt" >
    <filterchain>
        <concatfilter append="input2.txt" />
        <tokenfilter delimoutput="${line.separator}" />
    </filterchain>
</copy>

【讨论】:

  • 当您想使用已接受的解决方案未解决的过滤器进行附加时,这很有帮助。
【解决方案3】:

concat 任务也会这样做。有关示例,请参见 http://ant.apache.org/manual/Tasks/concat.html,但相关的是:

<concat destfile="README" append="true">Hello, World!</concat>

【讨论】:

  • +1 表示 concat,有许多选项更加灵活,如果文本为空,甚至不会触及文件 - 这允许您使用没有 ant-contrib 或目标的属性使连接成为条件(回声总是会添加到文件中——即使是空字符串)
【解决方案4】:

我发现其他答案很有用,但没有提供我需要的灵活性。下面是一个将回显写入临时文件的示例,该文件可用作页眉和页脚,然后使用连接来包装 xml 文档。

    <!-- Make header and footer for concatenation -->
    <echo file="header.txt"  append="true">
        <![CDATA[
            <?xml version='1.0' encoding='UTF-8'?>
            <!DOCTYPE foo ...>
        ]]>
    </echo>
    <echo file="footer.txt"  append="true">
        <![CDATA[
            </foo>
        ]]>
    </echo>

    <concat destfile="bigxml.xml">
        <fileset file="header.txt" />
        <fileset file="bigxml-without-wrap.xml" />
        <fileset file="footer.txt" />
    </concat>
    <delete file="header.txt"/>
    <delete file="footer.txt"/>

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多