Sobes.tech
Middle

Kā strādāt ar failiem un ievades/izvades (I/O) plūsmām Kotlin?

sobes.tech AI

Atbilde no AI

Kotlin standarta bibliotēka nodrošina ērtas paplašināšanas funkcijas darbam ar I/O, vienkāršojot mijiedarbību ar java.io.

Galvenie pieejas veidi un klases:

  • Faila lasīšana:

    • File.readBytes(): lasa faila saturu baitu masīvā.
    • File.readText(): lasa faila saturu kā virkni (ņemot vērā kodējumu).
    • File.forEachLine { ... }: apstrādā katru faila rindu.
    • File.bufferedReader(): izveido BufferedReader rindu lasīšanai.
    • File.inputStream(): izveido InputStream baitu lasīšanai.
  • Rakstīšana failā:

    • File.writeBytes(bytes): raksta baitu masīvu failā.
    • File.writeText(text, append): raksta virkni failā. append = true pievieno beigās.
    • File.printWriter(): izveido PrintWriter formātētam tekstam.
    • File.outputStream(): izveido OutputStream baitu rakstīšanai.
  • Plūsmu darbība:

    • InputStream.bufferedReader(): apvij InputStream BufferedReader.
    • OutputStream.printWriter(): apvij OutputStream PrintWriter.
    • paplašināšanas funkcijas copyTo(outputStream) plūsmu satura kopēšanai.
  • Resursu pārvaldība (closures):

    • paplašināšanas funkcijas use { ... } automātiski aizver plūsmas un lasītājus/rakstītājus, pat izņēmuma gadījumā.
import java.io.File

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

    // Rakstīšana failā
    file.writeText("Sveiki, Kotlin I/O!")
    file.appendText("\nTurpinājums rindā.")

    // Lasīšana no faila rindās
    file.forEachLine { line ->
        println(line)
    }

    // Visa faila satura lasīšana kā virknes
    val content = file.readText()
    println("\nVisa faila satura:")
    println(content)

    // Izmantojot bufferedReader ar use
    file.bufferedReader().use { reader ->
        reader.lines().forEach(::println) // Java Stream API izmantošana
    }

    // Faila kopēšana
    val newFile = File("my_file_copy.txt")
    file.inputStream().use { input ->
        newFile.outputStream().use { output ->
            input.copyTo(output) // ērtas plūsmu kopēšanas funkcijas
        }
    }
}

Salīdzinājums dažiem metožu veidiem:

Metode Mērķis Datu tips Rindas/Visas Piezīme
readBytes() Lasīt baitus ByteArray Visas Piemērots bināriem datiem
readText() Lasīt kā virkni String Visas Ērti teksta failiem
forEachLine { } Apstrādāt katru rindu String Rindas Ideāli lieliem teksta failiem
bufferedReader() Izveidot buferizētu lasītāju N/A Plūsma Elastīga kontrole, prasa use
writeBytes() Rakstīt baitus ByteArray Visas Piemērots bināriem datiem
writeText() Rakstīt virkni String Visas / Pievienot Ērti teksta failiem
printWriter() Izveidot formāta rakstītāju N/A Plūsma Ērti formāta izvadei, prasa use

Izmantojot use { ... } ir galvenais drošs veids darbam ar I/O Kotlin, nodrošinot resursu atbrīvošanu. Kotlin paplašina esošās Java klases (File, InputStream, OutputStream u.c.) ar ērtām funkcijām.