Groovy предоставляет несколько вспомогательных методов при работе с вводом / выводом. Groovy предоставляет более простые классы для обеспечения следующих функций для файлов.
- Чтение файлов
- Запись в файлы
- Обход файловых деревьев
- Чтение и запись объектов данных в файлы
В дополнение к этому вы всегда можете использовать обычные Java-классы, перечисленные ниже для операций ввода-вывода файлов.
- java.io.File
- java.io.InputStream
- java.io.OutputStream
- java.io.Reader
- java.io.Writer
Чтение файлов
В следующем примере будут выведены все строки текстового файла в Groovy. Метод eachLine встроен в класс File в Groovy, чтобы обеспечить чтение каждой строки текстового файла.
import java.io.File class Example { static void main(String[] args) { new File("E:/Example.txt").eachLine { line -> println "line : $line"; } } }
Класс File используется для создания экземпляра нового объекта, который принимает имя файла в качестве параметра. Затем он берет функцию eachLine, помещает ее в переменную с именем line и печатает ее соответствующим образом.
Если файл содержит следующие строки, они будут напечатаны.
line : Example1 line : Example2
Чтение содержимого файла как целой строки
Если вы хотите получить все содержимое файла в виде строки, вы можете использовать свойство text класса файла. В следующем примере показано, как это можно сделать.
class Example { static void main(String[] args) { File file = new File("E:/Example.txt") println file.text } }
Если файл содержит следующие строки, они будут напечатаны.
line : Example1 line : Example2
Запись в файлы
Если вы хотите записывать в файлы, вам нужно использовать класс Writer для вывода текста в файл. В следующем примере показано, как это можно сделать.
import java.io.File class Example { static void main(String[] args) { new File('E:/','Example.txt').withWriter('utf-8') { writer -> writer.writeLine 'Hello World' } } }
Если вы откроете файл Example.txt, вы увидите слова «Hello World», напечатанные в файле.
Получение размера файла
Если вы хотите получить размер файла, можно использовать свойство length класса файла, чтобы получить размер файла. В следующем примере показано, как это можно сделать.
class Example { static void main(String[] args) { File file = new File("E:/Example.txt") println "The file ${file.absolutePath} has ${file.length()} bytes" } }
Приведенный выше код будет показывать размер файла в байтах.
Проверка, является ли файл каталогом
Если вы хотите увидеть, является ли путь файлом или каталогом, можно использовать опции isFile и isDirectory класса File. В следующем примере показано, как это можно сделать.
class Example { static void main(String[] args) { def file = new File('E:/') println "File? ${file.isFile()}" println "Directory? ${file.isDirectory()}" } }
Приведенный выше код будет показывать следующий вывод —
File? false Directory? True
Создание каталога
Если вы хотите создать новый каталог, вы можете использовать функцию mkdir класса File. В следующем примере показано, как это можно сделать.
class Example { static void main(String[] args) { def file = new File('E:/Directory') file.mkdir() } }
Каталог E: \ Directory будет создан, если он не существует.
Удаление файла
Если вы хотите удалить файл, вы можете использовать функцию удаления класса File. В следующем примере показано, как это можно сделать.
class Example { static void main(String[] args) { def file = new File('E:/Example.txt') file.delete() } }
Файл будет удален, если он существует.
Копирование файлов
Groovy также предоставляет функциональность для копирования содержимого из одного файла в другой. В следующем примере показано, как это можно сделать.
class Example { static void main(String[] args) { def src = new File("E:/Example.txt") def dst = new File("E:/Example1.txt") dst << src.text } }
Будет создан файл Example1.txt, и все содержимое файла Example.txt будет скопировано в этот файл.
Получение содержимого каталога
Groovy также предоставляет функции для вывода списка дисков и файлов на диске.
В следующем примере показано, как можно отобразить диски на машине с помощью функции listRoots класса File.
class Example { static void main(String[] args) { def rootFiles = new File("test").listRoots() rootFiles.each { file -> println file.absolutePath } } }
В зависимости от дисков, доступных на вашем компьютере, производительность может отличаться. На стандартной машине вывод будет похож на следующий —
C:\ D:\
В следующем примере показано, как составить список файлов в определенном каталоге с помощью функции eachFile класса File.
class Example { static void main(String[] args) { new File("E:/Temp").eachFile() { file->println file.getAbsolutePath() } } }
Вывод будет отображать все файлы в каталоге E: \ Temp
Если вы хотите рекурсивно отображать все файлы в каталоге и его подкаталогах, то вы должны использовать функцию eachFileRecurse класса File. В следующем примере показано, как это можно сделать.
class Example { static void main(String[] args) { new File("E:/temp").eachFileRecurse() { file -> println file.getAbsolutePath() } } }
Вывод будет отображать все файлы в каталоге E: \ Temp и в его подкаталогах, если они существуют.