Sobes.tech
Middle

Kaip dirbti su failais ir įvesties/išvesties (I/O) srautais Kotlin?

sobes.tech AI

Atsakymas iš AI

Kotlin standartinė biblioteka teikia patogius išplėtinius metodus darbui su I/O, supaprastina sąveiką su java.io.

Pagrindiniai požiūriai ir klasės:

  • Failo skaitymas:

    • File.readBytes(): skaito failo turinį į baitų masyvą.
    • File.readText(): skaito failo turinį kaip eilutę (atsižvelgiant į koduotę).
    • File.forEachLine { ... }: apdoroja kiekvieną failo eilutę.
    • File.bufferedReader(): sukuria BufferedReader eilutėms skaityti.
    • File.inputStream(): sukuria InputStream baitų skaitymui.
  • Rašymas į failą:

    • File.writeBytes(bytes): rašo baitų masyvą į failą.
    • File.writeText(text, append): rašo eilutę į failą. append = true pridėjimui pabaigoje.
    • File.printWriter(): sukuria PrintWriter formatuotam tekstui rašyti.
    • File.outputStream(): sukuria OutputStream baitų rašymui.
  • Srautų valdymas:

    • InputStream.bufferedReader(): apvynioja InputStream į BufferedReader.
    • OutputStream.printWriter(): apvynioja OutputStream į PrintWriter.
    • plėtros funkcijos copyTo(outputStream) srautų turinio kopijavimui.
  • Resursų valdymas (closures):

    • plėtros funkcijos use { ... } automatiškai uždaro srautus ir skaitytuvus/rašytuvus, net ir išimčių atveju.
import java.io.File

fun main() {
    val file = File("my_file.txt")

    // Rašymas į failą
    file.writeText("Sveiki, Kotlin I/O!")
    file.appendText("\nTęsiama eilutė.")

    // Skaitymas iš failo eilutėmis
    file.forEachLine { line ->
        println(line)
    }

    // Visas failo turinys kaip eilutė
    val content = file.readText()
    println("\nVisas failo turinys:")
    println(content)

    // Naudojant bufferedReader su use
    file.bufferedReader().use { reader ->
        reader.lines().forEach(::println) // Java Stream API naudojimas
    }

    // Failo kopijavimas
    val newFile = File("my_file_copy.txt")
    file.inputStream().use { input ->
        newFile.outputStream().use { output ->
            input.copyTo(output) // Patogus srautų kopijavimas
        }
    }
}

Lyginamosios kai kurios metodų funkcijos:

Metodas Paskirtis Duomenų tipas Eilutinis / Visas Pastaba
readBytes() Skaityti baitus ByteArray Visas Tinka binariniams duomenims
readText() Skaityti kaip eilutę String Visas Patogu tekstiniams failams
forEachLine { } Apdoroti kiekvieną eilutę String Eilutinis Idealiai dideliems tekstiniams failams
bufferedReader() Sukurti buferizuotą skaitytuvą N/A Srautas Lanksti kontrolė, reikalauja use
writeBytes() Rašyti baitus ByteArray Visas Tinka binariniams duomenims
writeText() Rašyti eilutę String Visas / Pridėjimas Patogu tekstiniams failams
printWriter() Sukurti formatuotą rašytuvą N/A Srautas Patogu formatuotam išvedimui, reikalauja use

Naudojant use { ... } yra pagrindinis saugaus darbo su I/O būdas Kotlin, garantuojantis išteklių atlaisvinimą. Kotlin praplečia esamus Java klases (File, InputStream, OutputStream ir t.t.) patogiais funkcijomis.