Middle
195
questionbank

Как работать с файлами и потоками ввода-вывода (I/O) в Kotlin?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

В 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 и т.д.) удобными функциями.