2010-09-17 7 views
18

En uno de los archivos de configuración para mi proyecto, necesito adjuntar algo de texto. Estoy buscando algunas opciones para hacer esto usando Ant.¿Cómo añado un texto al final de un archivo usando Ant?

He encontrado una opción: encontrar algo y reemplazar ese texto con el nuevo texto y los valores anteriores. Pero no parece ser prometedor, ya que si en el futuro alguien cambia el archivo original, fallará la compilación.

Entonces, me gustaría que mi script agregue el texto al final del archivo.

¿Qué opciones tengo para tal requisito?

+0

ver también [Uso de hormiga para editar/añadir datos a un archivo de texto] (http://stackoverflow.com/questions/3754438/using-ant-to-edit-append-data-to-a- archivo de texto) –

Respuesta

38

Utilice la echo tarea:

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

EDIT: Si usted tiene HTML (u otro XML arbitrario) que debe escapar de ella con CDATA:

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

Hola, mi texto es una plantilla HTML, y esta tarea no parece funcionar con el texto de la plantilla. :(. ¿Qué hacer? –

+0

un problema, después de reemplazar el texto, la codificación cambia y todo el contenido modificado se coloca en una sola línea, con algunos caracteres espaciales en el medio. No puedo ver el archivo correctamente en el bloc de notas, editplus. Pero se ve bien en wordpad. ¿Esto está bien con los programas Java? –

+1

Eso probablemente tiene que ver con alguna combinación de la codificación de caracteres del archivo ant (build.xml), la codificación predeterminada del sistema y lo que sea que pase al 'codificación' de la tarea' '. Lo más probable es escribir un único retorno de carro (CR) como líneas nuevas en lugar de CR + LF, que es el estándar en Windows. Las terminaciones de línea se ignoran en HTML de todos modos, así que con suerte no en realidad importan, pero todo depende de lo que haga su programa Java con el archivo en cuestión. –

6

Otra opción sería utilizar un filterchain .

Por ejemplo, lo siguiente anexará el archivo input2.txt a input1.txt y escribirá el resultado en output.txt. Los separadores de línea para el sistema operativo actual (del java properties disponible en la hormiga) se usan en el archivo de salida. Antes de usar esto, tendrías que crear output2.txt sobre la marcha, supongo.

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

Esto es útil cuando quiere agregar un filtro que no está abordado por la solución aceptada. –

6

La tarea concat vería a hacerlo así. Ver http://ant.apache.org/manual/Tasks/concat.html de ejemplos, pero el pertinente es:

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

+1 para concat, mucho más flexible con muchas opciones, y ni siquiera toca el archivo si el texto está vacío, lo que le permite realizar la concatenación usando propiedades sin ant-contrib o targets (el eco siempre agregará al archivo - incluso una cadena vacía) – Rhubarb

0

me encontré con las otras respuestas útiles, pero no da la flexibilidad que necesitaba. A continuación se muestra un ejemplo de cómo escribir echos en el archivo temporal que se puede usar como encabezado y pie de página, y luego usar la concatenación para ajustar 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"/> 
Cuestiones relacionadas