Sobes.tech
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 ж.б.) ыңгайлуу кеңейтүүлөр менен кеңейтет.