2010-09-17 7 views
18

In einer der Konfigurationsdateien für mein Projekt muss ich etwas Text anhängen. Ich suche nach einigen Optionen, um dies mit Ant zu tun.Wie füge ich am Ende einer Datei Text mit Ant an?

Ich habe eine Option gefunden - etwas zu finden und diesen Text durch den neuen Text und die alten Werte zu ersetzen. Aber es scheint nicht vielversprechend zu sein, als ob jemand in Zukunft die ursprüngliche Datei ändert, die der Build versagt.

Also, ich möchte, dass mein Skript den Text am Ende der Datei hinzufügen.

Welche Optionen habe ich für eine solche Anforderung?

+0

Siehe auch [ant Verwendung zu bearbeiten/Daten anhängen in eine Textdatei] (http://stackoverflow.com/questions/3754438/using-ant-to-edit-append-data-to-a- Textdatei) –

Antwort

38

Verwenden Sie die echo Aufgabe:

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

EDIT: Wenn Sie HTML (oder andere beliebige XML) haben Sie es mit CDATA entkommen sollte:

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

Hallo, Mein Text ist eine HTML-Vorlage, und diese Aufgabe scheint nicht mit dem Vorlagentext zu arbeiten. :(. Was zu tun? –

+0

ein Problem, nach dem Ersetzen des Textes, Codierung wird geändert und der gesamte geänderte Inhalt wird in einer einzigen Zeile mit einigen Leerzeichen dazwischen platziert. Ich bin nicht in der Lage, die Datei im Editor richtig anzuzeigen, editplus.Aber in Wordpad sieht das gut aus.Wird das mit Java-Programmen in Ordnung? –

+1

Das hat wahrscheinlich mit einer Kombination aus der Zeichenkodierung der Datei ant (build.xml), der Standard-Systemkodierung und allem, was Sie an die 'encoding' Attribut der '' Aufgabe.Mehr wahrscheinlich ist es einen einzelnen Zeilenumbruch (CR) als Zeilenumbrüche anstelle von CR + LF zu schreiben, was der Standard unter Windows ist.Zeilenendungen werden sowieso in HTML ignoriert, also hoffentlich nicht tatsächlich wichtig, aber alles hängt davon ab, was Ihr Java-Programm mit der fraglichen Datei macht –

6

Eine andere Möglichkeit wäre, eine filterchain zu verwenden .

Im folgenden Beispiel wird die Datei input2.txt an input1.txt angehängt und das Ergebnis in output.txt geschrieben. Die Zeilentrennzeichen für das aktuelle Betriebssystem (von java properties verfügbar in ant) ​​werden in der Ausgabedatei verwendet. Bevor Sie dies verwenden, müssten Sie output2.txt im laufenden Betrieb erstellen, denke ich.

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

Dies ist hilfreich, wenn Sie einen Filter hinzufügen möchten, der nicht von der akzeptierten Lösung adressiert wird. –

6

Die concat Aufgabe aussehen würde, es auch zu tun. Siehe http://ant.apache.org/manual/Tasks/concat.html für Beispiele, aber die zugehörigen ist:

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

+1 für concat, viel flexibler mit vielen Optionen, und berührt die Datei nicht einmal, wenn der Text leer ist - das ermöglicht Ihnen, die Verkettung bedingungslos mit Eigenschaften ohne ant-contrib oder Ziele (Echo wird immer zu den Datei - auch eine leere Zeichenfolge) – Rhubarb

0

fand ich die anderen Antworten nützlich, aber nicht zu geben die Flexibilität, die ich brauchte. Im Folgenden finden Sie ein Beispiel für das Schreiben von Echos in eine temporäre Datei, die als Kopf- und Fußzeile verwendet werden kann. Anschließend wird die Verkettung verwendet, um ein XML-Dokument zu umbrechen.

<!-- 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"/> 
Verwandte Themen