2010-09-17 15 views
18

W jednym z plików konfiguracyjnych dla mojego projektu muszę dołączyć tekst. Szukam niektórych opcji, aby to zrobić za pomocą Ant.Jak mogę dodać tekst na końcu pliku za pomocą Ant?

Znalazłem jedną opcję - znaleźć coś i zastąpić tekst nowym tekstem oraz stare wartości. Ale to nie wydaje się być obiecujące, jakby w przyszłości ktoś zmienił oryginalny plik, którego kompilacja się nie powiedzie.

Chciałbym więc, aby mój skrypt dodał tekst na końcu pliku.

Jakie opcje mam dla takiego wymagania?

+0

Zobacz również [Using mrówkę do edycji/dołączania danych do pliku tekstowego] (http://stackoverflow.com/questions/3754438/using-ant-to-edit-append-data-to-a- plik tekstowy) –

Odpowiedz

38

Użyj zadanie echo:

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

EDIT: Jeśli masz HTML (lub innego dowolnego XML) należy uciec z CDATA:

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

Witaj, Mój tekst jest szablonem HTML i to zadanie nie działa z tekstem szablonu. :(co zrobić? –

+0

Jeden problem, po wymianie tekstu, kodowanie zostaje zmienione, a cała zmieniona zawartość jest umieszczona w jednym wierszu, z niektórymi spacjami między znakami. Nie jestem w stanie wyświetlić pliku poprawnie w notatniku, editplus Ale wygląda dobrze w WordPadzie. Czy to będzie dobrze z programami java? –

+1

To prawdopodobnie ma związek z kombinacją kodowania znaków pliku ant (build.xml), domyślnego kodowania systemu i wszystkiego, co przekazujesz do atrybut 'kodowanie'' zadania '' Najprawdopodobniej jest to pismo powrotu karetki (CR) jako linii nowej zamiast CR + LF, która jest standardem w systemie Windows. Koniec linii jest jednak i tak ignorowany w HTML, więc mam nadzieję, że nie ma to znaczenie, ale wszystko zależy od tego, co robi program Java z danym plikiem. –

6

Inną opcją byłoby użyć filterchain .

Na przykład poniżej zostanie dołączony plik input2.txt do input1.txt i zapisujemy wynik na output.txt. Separatory linii dla bieżącego systemu operacyjnego (z java properties dostępnej w ant) ​​są używane w pliku wyjściowym. Przed użyciem tego, musiałbym utworzyć w locie output2.txt.

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

Jest to pomocne, gdy chcesz dołączyć przy użyciu filtru, który nie jest rozwiązany przez zaakceptowane rozwiązanie. –

6

concat zadaniem będzie wyglądać jak to zrobić dobrze. Zobacz http://ant.apache.org/manual/Tasks/concat.html przykładów, ale istotne jest jeden:

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

+1 dla concata, o wiele bardziej elastyczny z wieloma opcjami, i nawet nie dotyka pliku, jeśli tekst jest pusty - co pozwala na uzależnienie konkatenacji od właściwości bez ant-contrib lub celów (echo zawsze dodaje do plik - nawet pusty ciąg znaków) – Rhubarb

0

znalazłem inne odpowiedzi użyteczne, ale nie daje elastyczność potrzebne. Poniżej znajduje się przykład zapisywania echa do pliku tymczasowego, który może być użyty jako nagłówek i stopka, a następnie za pomocą konkatenacji do zawijania dokumentu 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"/> 
Powiązane problemy