Применяем closures для автоматического закрытия файлов

В некоторых случаях при работе с Groovy надо обеспечить автоматическое закрытие файла, что особенно актуально во время использования ресурсоёмких классов. Вопрос может быть актуален для таких методов, как close() или destroy(). Рассмотрим пример.

Давайте представим, что нам надо запрограммировать вывод текста 'Hello' в файл output.txt. В языке Groovy для данной цели задействуется стандартный класс FileWriter:

Итак, при создании экземпляра w класса FileWriter мы осуществляем передачу названия файла (это может быть относительный путь, как в примере, либо полный). В момент создания экземпляра происходит открытие файла для записи (или же файл создается заново -- в том случае, если до этого он не существовал). Далее метод класса write выводит в файл уже свой аргумент. Но тут стоит учесть, что вывода не будет, да и файл станет считаться занятым ровно до тех пор, пока мы не выполним его закрытие --- w.close().

Чтобы потом не заботиться об этом закрытии, мы можем обеспечить автоматическое закрытие файла -- здесь пригодится метод withWriter класса FileWriter. В качестве параметра он принимает closure, выполняющий вывод, а потом автоматически закрывает наш файл:

При этом в момент вызова метода withWriter параметр closure t примет информацию как о расположении файла, так и о его имени.

Осталось добавить, что мы можем не вводить имя экземпляра класса w, а использовать при желании иную форму:

По материалам https://pessim50.ucoz.ru/Groovy.pdf.

P. S. Интересует Groovy? Записывайтесь на курс "Groovy Developer"!.