2010-09-15 13 views
7

Me preguntaba si hay alguna manera ordenada de escribir una nueva línea en el archivo de Groovy. Tengo el siguiente guión:¿Cómo imprimir prolijamente una nueva línea en Groovy?

new File("out.txt").withWriter{ writer -> 
    for(line in 0..100) { 
      writer << "$line" 
    } 
} 

que podría utilizar writer << "$line\n" o writer.println("$line"), pero yo estaba wondring si hay alguna manera de utilizar << operador para anexar la nueva línea para mí.

Respuesta

5

Se puede usar la programación meta de crear esa funcionalidad. Una solución fácil para cambiar el comportamiento del operador < < sería usar una categoría personalizada.

Ejemplo:

class LeftShiftNewlineCategory { 
    static Writer leftShift(Writer self, Object value) { 
     self.append value + "\n" 
    } 
} 
use(LeftShiftNewlineCategory) { 
    new File('test.txt').withWriter { out -> 
     out << "test" 
     out << "test2"  
    } 
} 

Más acerca de las categorías aquí: http://docs.codehaus.org/display/GROOVY/Groovy+Categories

+0

Esto es bueno. Acabo de comenzar con Groovy hace unos días y no estaba al tanto de esa característica. Debo comprobarlo! Gracias xlson. –

+0

¡De nada! :) Hay muchas maneras diferentes de usar la meta-programación en Groovy para mejorar las API existentes. Lo bueno de las categorías (imho) es que tienen un alcance para que no modifiques el comportamiento en todo tu programa. Consulte esta introducción a la metaprogramación de Groovy si desea obtener más información al respecto: http://www.ibm.com/developerworks/java/library/j-pg06239.html – xlson

0

Ha intentado

writer << "$line" << "\n" 

Cuál es la abreviatura de

writer << "$line" 
writer << "\n" 
5

Es una buena idea pedir el sistema para el separador de línea correcta, ya que pueden cambiar de un sistema operativo.

writer << "Line 1" + System.getProperty("line.separator") + "Line 2" 
+0

Algunos sistemas requieren \ n y otros requieren \ r \ norte. Es difícil de decir, así que deja que el sistema lo resuelva según este ejemplo. – Spider

Cuestiones relacionadas