2010-09-15 8 views
7

Мне было интересно, есть ли какой-нибудь опрятный способ написать новую строку в файл из Groovy. У меня есть следующий сценарий:Как аккуратно распечатать новую строку в Groovy?

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

я мог бы использовать writer << "$line\n" или writer.println("$line"), но я wondring, есть ли способ использовать << оператора, чтобы добавить новую строку для меня.

ответ

5

Вы можете использовать мета-программирования, чтобы создать эту функциональность. Легким решением для изменения поведения оператора < < было бы использование специальной категории.

Пример:

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

Подробнее о категориях здесь: http://docs.codehaus.org/display/GROOVY/Groovy+Categories

+0

Это приятный материал. Я только что начал с Groovy несколько дней назад и не знал об этой функции. Я должен проверить это! Спасибо xlson. –

+0

Добро пожаловать! :) Существует много разных способов использования метапрограмм в Groovy для расширения существующих API. Хорошая вещь с категориями (imho) заключается в том, что они охвачены так, что вы не изменяете поведение во всей своей программе. Ознакомьтесь с этим вступлением к мета-программированию Groovy, если вы хотите узнать больше об этом: http://www.ibm.com/developerworks/java/library/j-pg06239.html – xlson

0

Вы пробовали

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

Что представляет собой сокращенную

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

Это хорошая идея, чтобы попросить систему для правильного разделителя строк, поскольку они могут переключаться между операционными системами.

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

Некоторые системы требуют \ n, а другие требуют \ r \ п. Трудно сказать, поэтому давайте системе понять это в соответствии с этим примером. – Spider

Смежные вопросы