Функция useLines
Функция useLines читает файл построчно,
преобразует полученные строки через лямбда-выражение
и автоматически закрывает ресурсы после выполнения.
Принимает путь к файлу в виде строки или объекта File,
кодировку (по умолчанию UTF-8) и лямбду для обработки строк.
Импорт
import java.io.File
import java.nio.charset.Charset
import kotlin.io.useLines
Синтаксис
fun File.useLines(
charset: Charset = Charsets.UTF_8,
block: (Sequence<String>) -> T
): T
fun useLines(
path: String,
charset: Charset = Charsets.UTF_8,
block: (Sequence<String>) -> T
): T
Пример
Прочитаем файл data.txt и выведем количество строк:
val file = File("data.txt")
val lineCount = file.useLines { lines -> lines.count() }
println("Line count: $lineCount")
Результат выполнения кода:
Line count: 5
Пример
Прочитаем файл через путь и отфильтруем строки,
содержащие слово "error":
val errorLines = useLines("log.txt") { lines ->
lines.filter { it.contains("error") }.toList()
}
println("Error lines: $errorLines")
Результат выполнения кода:
Error lines: ['error: file not found', 'error: permission denied']
Пример
Прочитаем файл в кодировке Windows-1251 и преобразуем строки в верхний регистр:
val upperLines = File("data_win.txt").useLines(Charset.forName("Windows-1251")) { lines ->
lines.map { it.uppercase() }.toList()
}
println("Uppercase lines: $upperLines")
Результат выполнения кода:
Uppercase lines: ['FIRST LINE', 'SECOND LINE', 'THIRD LINE']
Пример
Посчитаем общую длину всех строк в файле:
val totalLength = File("text.txt").useLines { lines ->
lines.sumOf { it.length }
}
println("Total length: $totalLength")
Результат выполнения кода:
Total length: 123
Примечания
Функция useLines автоматически закрывает файловый поток
после выполнения лямбды, даже если произошла ошибка.
Это делает её безопасной для работы с файлами.
Возвращаемое значение соответствует результату лямбды.
Смотрите также
-
функцию
readLines,
которая читает все строки файла в список -
функцию
forEachLine,
которая выполняет действие для каждой строки файла -
функцию
bufferedReader,
которая создает буферизованный читатель для файла -
класс
File,
который представляет файл или директорию