2010-09-15 1 views
7

Mi chiedevo se c'è un modo pulito per scrivere una nuova riga nel file da Groovy. Ho il seguente script:Come stampare con precisione la nuova riga in Groovy?

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

potrei usare writer << "$line\n" o writer.println("$line"), ma ero wondring se non v'è alcun modo per utilizzare << all'operatore per aggiungere la nuova linea per me.

risposta

5

Si potrebbe usare programmazione meta per creare tale funzionalità. Una soluzione semplice per modificare il comportamento dell'operatore < < consiste nell'utilizzare una categoria personalizzata.

Esempio:

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"  
    } 
} 

più su categorie qui: http://docs.codehaus.org/display/GROOVY/Groovy+Categories

+0

Questa è roba carina. Ho appena iniziato con Groovy qualche giorno fa e non ero a conoscenza di quella funzionalità. Devo dare un'occhiata! Grazie xlson. –

+0

Prego! :) Esistono molti modi diversi di utilizzare la meta-programmazione in Groovy per migliorare le API esistenti. La cosa buona con le categorie (imho) è che sono mirate in modo da non modificare il comportamento in tutto il tuo programma. Dai un'occhiata a questa intro alla meta-programmazione di Groovy se vuoi saperne di più a riguardo: http://www.ibm.com/developerworks/java/library/j-pg06239.html – xlson

0

Hai provato

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

Quale è una scorciatoia per

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

E 'una bella idea quella di chiedere al sistema per il separatore di linea corretta in quanto questi possono cambiare tra i sistemi operativi.

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

Alcuni sistemi richiedono \ n e altri richiedono \ r \ n. È difficile dirlo, quindi lascia che sia il sistema a capire come in questo esempio. – Spider