В Kotlin стандартная библиотека предоставляет удобные расширения для работы с I/O, упрощая взаимодействие с java.io.
Основные подходы и классы:
Чтение из файла:
File.readBytes(): Читает содержимое файла в массив байт.File.readText(): Читает содержимое файла как строку (с учетом кодировки).File.forEachLine { ... }: Обрабатывает каждую строку файла.File.bufferedReader(): Создает BufferedReader для построчного чтения.File.inputStream(): Создает InputStream для чтения байтов.Запись в файл:
File.writeBytes(bytes): Записывает массив байт в файл.File.writeText(text, append): Записывает строку в файл. append = true для добавления в конец.File.printWriter(): Создает PrintWriter для удобной записи форматированного текста.File.outputStream(): Создает OutputStream для записи байтов.Работа с потоками:
InputStream.bufferedReader(): Обертывает InputStream в BufferedReader.OutputStream.printWriter(): Обертывает OutputStream в PrintWriter.copyTo(outputStream) для копирования содержимого потоков.Обработка ресурсов (closures):
use { ... } для автоматического закрытия потоков и ридеров/врайтеров, даже в случае исключений.kotlin
Таблица сравнения некоторых методов:
| Метод | Назначение | Тип данных | Построчный/Целиком | Примечание |
|---|---|---|---|---|
readBytes() | Чтение в байты | ByteArray | Целиком | Подходит для бинарных данных |
readText() | Чтение как строку | String | Целиком | Удобно для текстовых файлов |
forEachLine { } | Обработка каждой строки | String | Построчный | Идеально для больших текстовых файлов |
bufferedReader() | Создание буферизированного ридера | N/A | Потоковый | Гибкий контроль, требует use |
writeBytes() | Запись байтов | ByteArray | Целиком | Подходит для бинарных данных |
writeText() | Запись строки | String | Целиком/Добавление | Удобно для текстовых файлов |
printWriter() | Создание врайтера с форматированием | N/A | Потоковый | Удобно для форматированного вывода, требует use |
Использование use { ... } является ключевым для безопасной работы с I/O в Kotlin, гарантируя освобождение ресурсов. Kotlin расширяет существующие Java классы (File, InputStream, OutputStream и т.д.) удобными функциями.