Sobes.tech
Middle

Kuidas töötada failide ja sisendi/väljundi (I/O) voogudega Kotlinis?

sobes.tech AI

Vastus AI-lt

Kotlin standardraamatukogu pakub mugavaid laiendusi I/O-ga töötamiseks, lihtsustades suhtlust java.io-ga.

Põhised lähenemised ja klassid:

  • Failist lugemine:

    • File.readBytes(): loeb faili sisu baitide massiivi.
    • File.readText(): loeb faili sisu stringina (arvestades kodeeringut).
    • File.forEachLine { ... }: töötleb iga faili rida.
    • File.bufferedReader(): loob BufferedReader ridade lugemiseks.
    • File.inputStream(): loob InputStream baitide lugemiseks.
  • Faili kirjutamine:

    • File.writeBytes(bytes): kirjutab baitide massiivi faili.
    • File.writeText(text, append): kirjutab stringi faili. append = true lisamiseks lõppu.
    • File.printWriter(): loob PrintWriter vormindatud teksti kirjutamiseks.
    • File.outputStream(): loob OutputStream baitide kirjutamiseks.
  • ** voogude töötlemine:**

    • InputStream.bufferedReader(): ümbritseb InputStream BufferedReader-iga.
    • OutputStream.printWriter(): ümbritseb OutputStream PrintWriter-iga.
    • laiendusfunktsioonid copyTo(outputStream) voogude sisu kopeerimiseks.
  • Resursside haldamine (closures):

    • laiendusfunktsioonid use { ... } automaatselt sulgevad voogud ja lugerid/kirjutajad, isegi erandite korral.
import java.io.File

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

    // Faili kirjutamine
    file.writeText("Tere, Kotlin I/O!")
    file.appendText("\nJätkame rida.")

    // Failist ridade kaupa lugemine
    file.forEachLine { line ->
        println(line)
    }

    // Kogu faili sisu stringina
    val content = file.readText()
    println("\nKogu faili sisu:")
    println(content)

    // BufferedReader kasutamine use-iga
    file.bufferedReader().use { reader ->
        reader.lines().forEach(::println) // Java Stream API kasutamine
    }

    // Faili koopimine
    val newFile = File("my_file_copy.txt")
    file.inputStream().use { input ->
        newFile.outputStream().use { output ->
            input.copyTo(output) // mugav voogude koopimine
        }
    }
}

Mõned meetodite võrdlused:

Meetod Otstarve Andmetüüp Rida/Üksik Märkus
readBytes() Loeb baitid ByteArray Üksik Sobib binaarandmete jaoks
readText() Loeb kui string String Üksik Mugav tekstifailidele
forEachLine { } Töötleb iga rida String Rida Ideaalne suurte tekstifailide jaoks
bufferedReader() Loob buferiseeritud luger N/A Voog Paindlik kontroll, nõuab use
writeBytes() Kirjutab baitid ByteArray Üksik Sobib binaarandmete jaoks
writeText() Kirjutab stringi String Üksik / Lisamine Mugav tekstifailidele
printWriter() Loob vormindatud kirjutaja N/A Voog Mugav vormindatud väljund, nõuab use

Kasutades use { ... } on peamine turvaline viis Kotlinis I/O-ga töötamiseks, tagades ressursside vabastamise. Kotlin laiendab olemasolevaid Java klasse (File, InputStream, OutputStream jms) mugavate funktsioonidega.