Sobes.tech
Middle

Hogyan dolgozzunk fájlokkal és bemenet/kimenet (I/O) folyamokkal Kotlinben?

sobes.tech MI

Válasz az MI-től

A Kotlin szabványos könyvtár kényelmes kiterjesztéseket kínál az I/O kezeléséhez, egyszerűsítve a java.io-val való interakciót.

Fő megközelítések és osztályok:

  • Fájl olvasása:

    • File.readBytes(): A fájl tartalmát bájt tömbként olvassa be.
    • File.readText(): A fájl tartalmát szövegként olvassa be (kódolás figyelembevételével).
    • File.forEachLine { ... }: Minden sort feldolgoz a fájlban.
    • File.bufferedReader(): Létrehoz egy BufferedReader-t soronkénti olvasáshoz.
    • File.inputStream(): Létrehoz egy InputStream-et bájt olvasásához.
  • Írás fájlba:

    • File.writeBytes(bytes): Bájt tömböt ír a fájlba.
    • File.writeText(text, append): Szöveget ír a fájlba. Az append = true hozzáfűzést jelent.
    • File.printWriter(): Létrehoz egy PrintWriter-t formázott szöveg írásához.
    • File.outputStream(): Létrehoz egy OutputStream-et bájt íráshoz.
  • Áramlatokkal való munka:

    • InputStream.bufferedReader(): Az InputStream-et BufferedReader-ré csomagolja.
    • OutputStream.printWriter(): Az OutputStream-et PrintWriter-ré csomagolja.
    • Az copyTo(outputStream) kiterjesztési függvények az áramlatok tartalmának másolására.
  • Erőforrások kezelése (closures):

    • A use { ... } kiterjesztések automatikusan bezárják az áramlatokat és olvasókat/írókat, még kivétel esetén is.
import java.io.File

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

    // Írás fájlba
    file.writeText("Helló, Kotlin I/O!")
    file.appendText("\nFolytatás.")

    // Olvasás soronként
    file.forEachLine { line ->
        println(line)
    }

    // Az egész fájl olvasása szövegként
    val content = file.readText()
    println("\nA fájl teljes tartalma:")
    println(content)

    // bufferedReader használata `use`-vel
    file.bufferedReader().use { reader ->
        reader.lines().forEach(::println) // Java Stream API-val olvasás
    }

    // Fájl másolása
    val newFile = File("my_file_copy.txt")
    file.inputStream().use { input ->
        newFile.outputStream().use { output ->
            input.copyTo(output) // Kényelmes másolás
        }
    }
}

Néhány módszer összehasonlító táblázata:

Metódus Célja Adattípus Soronként/egész Megjegyzés
readBytes() Byte olvasás ByteArray Egész Bináris adatokhoz alkalmas
readText() Szövegként olvasás String Egész Szövegfájlokhoz ideális
forEachLine { } Minden sor feldolgozása String Soronként Nagy szövegfájlokhoz kiváló
bufferedReader() Bufferes olvasó létrehozása N/A Áramlás Rugalmas kontroll, use szükséges
writeBytes() Byte írás ByteArray Egész Bináris adatokhoz alkalmas
writeText() Szöveg írás String Egész/hozzáadás Szövegfájlokhoz kényelmes
printWriter() Formázott író létrehozása N/A Áramlás Kényelmes formázott kimenethez, use szükséges

A use { ... } használata kulcsfontosságú a Kotlinben az I/O biztonságos kezeléséhez, garantálva az erőforrások felszabadítását. A Kotlin kiterjeszti a meglévő Java osztályokat (File, InputStream, OutputStream stb.) kényelmes funkciókkal.