Groovy предусматривает ряд методов для работы с I/О. Все они работают со стандартным Java Reader/Writer и входящего / OutputStream и File и классами URL.
Использование замкнутых выражений позволяет ресурсам, которые будут обработаны, гарантировать что вещи должным образом закрыты независимо от исключений, например, чтобы выполнить итерации через каждую строку файла может быть использован.
..new File("foo.txt").eachLine { line -> println(line) }
Если по каким-либо причинам println() метод должен был бросить исключение, eachLine() метод гарантирует, что файл ресурса корректно закрыт. Аналогично, если исключение происходит при чтении, ресурс будет закрыто тоже.
Если вы хотите использовать reader/writer объекта или объект потока input/output есть вспомогательные методы обработки ресурса для Вас через замкнутое выражение - который автоматически закроет любой ресурс, если происходит исключение, например
def count=0, MAXSIZE=100
new File("foo.txt").withReader { reader ->
while (reader.readLine() != null) {
if (++count > MAXSIZE) throw new RuntimeException('File too large!')
}
}
и
def fields = ["a":"1", "b":"2", "c":"3"]
new File("foo.ini").withWriter { out ->
fields.each() { key, value ->
out.writeLine("${key}=${value}")
}
}