Middle
Чӣ гуна кор кардан бо файлҳо ва ҷараёнҳои воридот/баромад (I/O) дар Kotlin?
sobes.tech AI
Ҷавоб аз AI
Либраторията на 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 { ... }гарантират автоматичното затваряне на потоците и четец/писач, дори при изключения.
- Разширенията
import java.io.File
fun main() {
val file = File("my_file.txt")
// Запис в файл
file.writeText("Здравей, Kotlin I/O!")
file.appendText("\nПродължение на реда.")
// Четене на редове
file.forEachLine { line ->
println(line)
}
// Четене на цялото съдържание като текст
val content = file.readText()
println("\nЦялото съдържание на файла:")
println(content)
// Използване на bufferedReader с `use`
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Четене чрез Java Stream API
}
// Копиране на файл
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // Удобно копиране на потоци
}
}
}
Таблица за сравнение на някои методи:
| Метод | Назначение | Тип данни | Построчно/Цялостно | Забележка |
|---|---|---|---|---|
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 и др.) с удобни функции.