Middle
Kotlinде файлдар жана кирүү/чыгуу (I/O) агымдар менен кантип иштеш керек?
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)
// `use` менен bufferedReader колдонуу
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 { ... } колдонуу Kotlin-да коопсуз I/O иштөө үчүн негизги, ресурстарды бошотуу гарантиясын берет. Kotlin бар Java класстарын (File, InputStream, OutputStream ж.б.) ыңгайлуу кеңейтүүлөр менен кеңейтет.