Функция useLines

Функция useLines читает файл построчно, преобразует полученные строки через лямбда-выражение и автоматически закрывает ресурсы после выполнения. Принимает путь к файлу в виде строки или объекта File, кодировку (по умолчанию UTF-8) и лямбду для обработки строк.

Импорт

kotlinimport java.io.File
import java.nio.charset.Charset
import kotlin.io.useLines

Синтаксис

kotlinfun File.useLines(
  charset: Charset = Charsets.UTF_8,
  block: (Sequence<String>) -> T
): T
kotlinfun useLines(
  path: String,
  charset: Charset = Charsets.UTF_8,
  block: (Sequence<String>) -> T
): T

Пример

Прочитаем файл data.txt и выведем количество строк:

kotlinval file = File("data.txt")
val lineCount = file.useLines { lines -> lines.count() }
println("Line count: $lineCount")

Результат выполнения кода:

kotlinLine count: 5

Пример

Прочитаем файл через путь и отфильтруем строки, содержащие слово "error":

kotlinval errorLines = useLines("log.txt") { lines ->
  lines.filter { it.contains("error") }.toList()
}
println("Error lines: $errorLines")

Результат выполнения кода:

kotlinError lines: ['error: file not found', 'error: permission denied']

Пример

Прочитаем файл в кодировке Windows-1251 и преобразуем строки в верхний регистр:

kotlinval upperLines = File("data_win.txt").useLines(Charset.forName("Windows-1251")) { lines ->
  lines.map { it.uppercase() }.toList()
}
println("Uppercase lines: $upperLines")

Результат выполнения кода:

kotlinUppercase lines: ['FIRST LINE', 'SECOND LINE', 'THIRD LINE']

Пример

Посчитаем общую длину всех строк в файле:

kotlinval totalLength = File("text.txt").useLines { lines ->
  lines.sumOf { it.length }
}
println("Total length: $totalLength")

Результат выполнения кода:

kotlinTotal length: 123

Примечания

Функция useLines автоматически закрывает файловый поток после выполнения лямбды, даже если произошла ошибка. Это делает её безопасной для работы с файлами. Возвращаемое значение соответствует результату лямбды.

Смотрите также

  • функцию readLines,
    которая читает все строки файла в список
  • функцию forEachLine,
    которая выполняет действие для каждой строки файла
  • функцию bufferedReader,
    которая создает буферизованный читатель для файла
  • класс File,
    который представляет файл или директорию