Чтение из файла в Kotlin

1. Общий обзор

В этом кратком руководстве мы узнаем о различных способах чтения файла в Kotlin.

Мы рассмотрим оба варианта использования: чтение всего файла в виде строки, а также чтение его в виде списка отдельных строк. Также можно получить его из полного абсолютного пути или из ресурса проекта.

 В этом кратком руководстве мы узнаем о различных способах чтения файла в Kotlin.

2. Чтение файла

Давайте сначала создадим входной файл, который будет считываться Kotlin. Мы создаем файл с именем Kotlin. и помещаем его в каталог, доступный нашему коду.

Содержимое файла может быть следующим:

Hello to Kotlin. It's:
1. Concise
2. Safe
3. Interoperable
4. Tool-friendly

Теперь давайте рассмотрим различные способы, которыми мы можем прочитать этот файл. Мы должны передать полный путь к созданному выше файлу в качестве входных данных для начальных методов и относительный путь в наших ресурсах для двух последних.

2.1. Предварительная строка

Считывает файл построчно, используя указанную кодировку (по умолчанию используется UTF-8), и вызывает действие для каждой строки:

fun readFileLineByLineUsingForEachLine(fileName: String)
= File(fileName).forEachLine { println(it) }

2.2. Правила пользования

Вызывает обратный вызов данного блока, передавая ему последовательность всех строк в файле.

Как только обработка завершена, файл закрывается:

fun readFileAsLinesUsingUseLines(fileName: String): List<String>
= File(fileName).useLines { it.toList() }

2.3. Буферизованное средство чтения

Возвращает новый BufferedReader для чтения содержимого файла.

Как только у нас будет BufferedReader, мы сможем прочитать все строки в нем:

fun readFileAsLinesUsingBufferedReader(fileName: String): List<String>
= File(fileName).bufferedReader().readLines()

2.4. Строки чтения

Непосредственно считывает содержимое файла в виде списка строк:

fun readFileAsLinesUsingReadLines(fileName: String): List<String>
= File(fileName).readLines()

Этот метод не рекомендуется использовать для работы с большими файлами.

2.5. Входной поток

Создает новый FileInputStream для файла и возвращает его в качестве результата.

Как только у нас будет входной поток, мы можем преобразовать его в байты, а затем в полную строку:

fun readFileAsTextUsingInputStream(fileName: String)
= File(fileName).inputStream().readBytes().toString(Charsets.UTF_8)

2.6. Прочитанный текст

Считывает все содержимое файла в виде строки с указанной кодировкой (по умолчанию используется UTF-8).:

fun readFileDirectlyAsText(fileName: String): String
= File(fileName).readText(Charsets.UTF_8)

Этот метод не рекомендуется для больших файлов и имеет внутреннее ограничение в размере 2 ГБ.

2.7. Получение ресурса

Находит ресурс с заданным именем и возвращает URL-адрес объекта:

fun readFileUsingGetResource(fileName: String)
= this::class.java.getResource(fileName).readText(Charsets.UTF_8)

Если он найдет ресурс, он вернет URL-адрес, который можно обработать, вызвав метод readText, как показано ранее. Если он не может найти ресурс, он возвращает значение null. При использовании getResource передаваемое имя файла является не абсолютным именем файла, а именем, относящимся к ресурсам нашего проекта.

2.8. Получение ресурсного потока

Находит ресурс с заданным именем и возвращает экземпляр InputStream:

fun readFileAsLinesUsingGetResourceAsStream(fileName: String)
= this::class.java.getResourceAsStream(fileName).bufferedReader().readLines()

Если он найдет ресурс, он вернет InputStream, который может быть обработан, как показано ранее, например, путем получения BufferedReader. Если он не может найти ресурс, он возвращает значение null. При использовании getResourceAsStream передаваемое имя файла является не абсолютным именем файла, а именем, относящимся к ресурсам нашего проекта.

3. Заключение

В этой статье мы рассмотрели различные способы чтения файла в Kotlin. В зависимости от варианта использования, мы можем выбрать чтение файла построчно или полностью в виде текста. Мы можем ссылаться на файл абсолютным образом или находить его среди ресурсов.

Оригинал статьи: https://www.baeldung.com/kotlin/read-file