Middle
Ako pracovať so súbormi a tokmi vstupu/výstupu (I/O) v Kotlin?
sobes.tech AI
Odpoveď od AI
Štandardná knižnica Kotlinu poskytuje pohodlné rozšírenia pre prácu s I/O, zjednodušujúc interakciu s java.io.
Hlavné prístupy a triedy:
-
Čítanie zo súboru:
File.readBytes(): Číta obsah súboru do poľa bajtov.File.readText(): Číta obsah súboru ako reťazec (s prihliadnutím na kódovanie).File.forEachLine { ... }: Spracováva každý riadok súboru.File.bufferedReader(): VytváraBufferedReaderna riadkové čítanie.File.inputStream(): VytváraInputStreamna čítanie bajtov.
-
Zápis do súboru:
File.writeBytes(bytes): Zapíše pole bajtov do súboru.File.writeText(text, append): Zapíše reťazec do súboru.append = truepridáva na koniec.File.printWriter(): VytváraPrintWriterna pohodlný zápis formátovaného textu.File.outputStream(): VytváraOutputStreamna zápis bajtov.
-
Práca s prúdmi:
InputStream.bufferedReader(): ObalujeInputStreamdoBufferedReader.OutputStream.printWriter(): ObalujeOutputStreamdoPrintWriter.- Rozšírenia
copyTo(outputStream)na kopírovanie obsahu prúdov.
-
Správa zdrojov (closures):
- Rozšírenia
use { ... }zabezpečujú automatické zatvorenie prúdov a čítačov/pisateľov, aj pri výnimkách.
- Rozšírenia
import java.io.File
fun main() {
val file = File("my_file.txt")
// Zápis do súboru
file.writeText("Ahoj, Kotlin I/O!")
file.appendText("\nPokračovanie.")
// Čítanie po riadkoch
file.forEachLine { line ->
println(line)
}
// Čítanie celého súboru ako text
val content = file.readText()
println("\nCelý obsah súboru:")
println(content)
// Použitie bufferedReader s `use`
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Čítanie cez Java Stream API
}
// Kopírovanie súboru
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // Pohodlné kopírovanie prúdov
}
}
}
Porovnanie niektorých metód:
| Metóda | Účel | Typ údajov | Riadok po riadku/kompletné | Poznámka |
|---|---|---|---|---|
readBytes() |
Čítanie do bajtov | ByteArray |
Kompletné | Vhodné pre binárne dáta |
readText() |
Čítanie ako reťazec | String |
Kompletné | Vhodné pre textové súbory |
forEachLine { } |
Spracovanie každého riadku | String |
Riadok po riadku | Ideálne pre veľké textové súbory |
bufferedReader() |
Vytvorenie bufferovaného čítača | N/A | Prúdové | Flexibilná kontrola, vyžaduje use |
writeBytes() |
Zápis bajtov | ByteArray |
Kompletné | Vhodné pre binárne dáta |
writeText() |
Zápis reťazca | String |
Kompletné/doplnenie | Pohodlné pre textové súbory |
printWriter() |
Vytvorenie formátovaného pisateľa | N/A | Prúdové | Pohodlné pre formátovaný výstup, vyžaduje use |
Použitie use { ... } je kľúčové pre bezpečnú prácu s I/O v Kotlin, zabezpečuje uvoľnenie zdrojov. Kotlin rozširuje existujúce Java triedy (File, InputStream, OutputStream a pod.) o pohodlné funkcie.