2010-09-17 10 views
18

In uno dei file di configurazione per il mio progetto ho bisogno di aggiungere del testo. Sto cercando alcune opzioni per farlo usando Ant.Come posso aggiungere del testo alla fine di un file usando Ant?

Ho trovato un'opzione: trovare qualcosa e sostituire quel testo con il nuovo testo e i vecchi valori. Ma non sembra essere promettente, come se in futuro qualcuno modificasse il file originale, la compilazione fallirebbe.

Quindi, vorrei che il mio script aggiungesse il testo alla fine del file.

Quali opzioni ho per tale requisito?

+0

Vedi anche [Utilizzo di Ant per modificare/aggiungere dati a un file di testo] (http://stackoverflow.com/questions/3754438/using-ant-to-edit-append-data-to-a- file di testo) –

risposta

38

utilizzare l'attività echo:

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

EDIT: Se si dispone di HTML (o altro XML arbitrario) si dovrebbe scappare con CDATA:

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

Salve, il mio testo è un modello HTML e questa attività sembra non funzionare con il testo del modello. :(. Cosa fare? –

+0

un problema, dopo aver sostituito il testo, la codifica viene modificata e tutto il contenuto modificato viene collocato in una singola riga, con alcuni caratteri spaziali in mezzo. Non riesco a visualizzare correttamente il file nel blocco note, editplus, ma sembra okay nel wordpad, va bene con i programmi java? –

+1

Questo probabilmente ha a che fare con alcune combinazioni della codifica dei caratteri del file ant (build.xml), della codifica di sistema predefinita e di tutto ciò che si passa alla attributo 'encoding' del task' 'Molto probabilmente sta scrivendo un solo carriage return (CR) come newline invece di CR + LF che è lo standard su Windows. Le terminazioni di riga vengono comunque ignorate in HTML, quindi speriamo che non In realtà importa, ma tutto dipende da ciò che il tuo programma Java fa con il file in questione. –

6

Un'altra opzione sarebbe quella di utilizzare un filterchain .

Ad esempio, quanto segue aggiunge il file input2.txt a input1.txt e scrive il risultato in output.txt. I separatori di riga per il sistema operativo corrente (dal java properties disponibile nella formica) vengono utilizzati nel file di output. Prima di usarlo dovresti creare immediatamente output2.txt.

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

Questo è utile quando vuoi accodare usando un filtro che non è indirizzato dalla soluzione accettata. –

6

Il concat compito sarebbe cercare di farlo pure. Vedere http://ant.apache.org/manual/Tasks/concat.html per gli esempi, ma quello pertinente è:

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

+1 per concat, molto più flessibile con molte opzioni e non tocca nemmeno il file se il testo è vuoto, il che consente di rendere condizionale la concatenazione usando proprietà senza ant-contrib o target (echo aggiungerà sempre al file - anche una stringa vuota) – Rhubarb

0

ho trovato le altre risposte utili, ma non dando la flessibilità di cui avevo bisogno. Di seguito è riportato un esempio di scrittura di echos nel file temp che può essere utilizzato come intestazione e piè di pagina, quindi utilizzando la concatenazione per racchiudere un documento 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"/> 
Problemi correlati