2010-09-17 1 views
18

В одном из файлов конфигурации для моего проекта мне нужно добавить текст. Я ищу некоторые варианты для этого, используя Ant.Как добавить некоторый текст в конец файла с помощью Ant?

Я нашел один вариант - найти что-то и заменить этот текст новым текстом и старыми значениями. Но это не кажется многообещающим, как будто в будущем кто-то изменит исходный файл, сборка завершится неудачей.

Итак, я хотел бы, чтобы мой скрипт добавлял текст в конец файла.

Какие у меня есть варианты для такого требования?

+0

Смотрите также [Использование муравей для редактирования/добавления данных в текстовый файл] (http://stackoverflow.com/questions/3754438/using-ant-to-edit-append-data-to-a- text-file) –

ответ

38

Используйте echo задачу:

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

EDIT: Если у вас есть HTML (или другой произвольный XML), вы должны избавиться от нее с CDATA:

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

Привет, Мой текст является HTML-шаблоном, и эта задача, похоже, не работает с текстом шаблона. :(Что делать? –

+0

Одна проблема, после замены текста, кодировка меняется, и все измененное содержимое помещается в одну строку с несколькими промежуточными символами между ними. Я не могу правильно просмотреть файл в блокноте, editplus, но выглядит в WordPad. Будет ли это хорошо с java-программами? –

+1

Скорее всего, это связано с некоторой комбинацией кодировки символов файла ant (build.xml), системной кодировки по умолчанию и всего, что вы передаете 'encoding'' задачи ''. Скорее всего, он записывает единственный возврат каретки (CR) в качестве новых строк вместо CR + LF, который является стандартом для Windows. Окончания строк в любом случае игнорируются в HTML, поэтому, надеюсь, это не так на самом деле имеет значение, но все зависит от того, что делает ваша программа Java с данным файлом. –

6

Другим вариантом было бы использовать filterchain ,

Например, следующий файл будет добавлен input2.txt в input1.txt и напишите результат output.txt. В выходном файле используются разделители строк для текущей операционной системы (от java properties, доступных в ant). До этого вы должны были бы создать output2.txt на лету, я думаю.

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

Это полезно, если вы хотите добавить фильтр, который не рассматривается принятым решением. –

6

CONCAT задача будет выглядеть, чтобы сделать это, как хорошо. См http://ant.apache.org/manual/Tasks/concat.html примеры, но уместна одна:

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

+1 для concat, гораздо более гибкий со многими параметрами и даже не касается файла, если текст пуст, что позволяет сделать условное условное использование с использованием свойств без ant-contrib или целей (эхо всегда будет добавлять к файл - даже пустая строка) – Rhubarb

0

я нашел другие ответы полезными, но не давая гибкость мне нужно. Ниже приведен пример записи echos в файл temp, который можно использовать как верхний и нижний колонтитулы, а затем использовать конкатенацию для обертывания 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"/>