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 egyBufferedReader-t soronkénti olvasáshoz.File.inputStream(): Létrehoz egyInputStream-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. Azappend = truehozzáfűzést jelent.File.printWriter(): Létrehoz egyPrintWriter-t formázott szöveg írásához.File.outputStream(): Létrehoz egyOutputStream-et bájt íráshoz.
-
Áramlatokkal való munka:
InputStream.bufferedReader(): AzInputStream-etBufferedReader-ré csomagolja.OutputStream.printWriter(): AzOutputStream-etPrintWriter-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.
- A
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.