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(): loobBufferedReaderridade lugemiseks.File.inputStream(): loobInputStreambaitide lugemiseks.
-
Faili kirjutamine:
File.writeBytes(bytes): kirjutab baitide massiivi faili.File.writeText(text, append): kirjutab stringi faili.append = truelisamiseks lõppu.File.printWriter(): loobPrintWritervormindatud teksti kirjutamiseks.File.outputStream(): loobOutputStreambaitide kirjutamiseks.
-
** voogude töötlemine:**
InputStream.bufferedReader(): ümbritsebInputStreamBufferedReader-iga.OutputStream.printWriter(): ümbritsebOutputStreamPrintWriter-iga.- laiendusfunktsioonid
copyTo(outputStream)voogude sisu kopeerimiseks.
-
Resursside haldamine (closures):
- laiendusfunktsioonid
use { ... }automaatselt sulgevad voogud ja lugerid/kirjutajad, isegi erandite korral.
- laiendusfunktsioonid
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.