Middle
Hoe werk je met bestanden en invoer-/uitvoerstromen (I/O) in Kotlin?
sobes.tech AI
Antwoord van AI
De standaardbibliotheek van Kotlin biedt handige uitbreidingen voor werken met I/O, waardoor de interactie met java.io wordt vereenvoudigd.
Belangrijkste benaderingen en klassen:
-
Lezen uit een bestand:
File.readBytes(): Leest de inhoud van het bestand in een byte-array.File.readText(): Leest de inhoud van het bestand als een string (met encoding).File.forEachLine { ... }: Verwerkt elke regel van het bestand.File.bufferedReader(): Maakt eenBufferedReadervoor regelgebaseerd lezen.File.inputStream(): Maakt eenInputStreamvoor het lezen van bytes.
-
Schrijven naar een bestand:
File.writeBytes(bytes): Schrijft een byte-array naar een bestand.File.writeText(text, append): Schrijft een string naar een bestand.append = truevoor toevoegen.File.printWriter(): Maakt eenPrintWritervoor geformatteerd tekstschrijven.File.outputStream(): Maakt eenOutputStreamvoor het schrijven van bytes.
-
Werken met streams:
InputStream.bufferedReader(): Wikkelt eenInputStreamin eenBufferedReader.OutputStream.printWriter(): Wikkelt eenOutputStreamin eenPrintWriter.- Extensiefuncties
copyTo(outputStream)voor het kopiëren van inhoud tussen streams.
-
Resourcebeheer (closures):
- Extensiefuncties
use { ... }voor automatische sluiting van streams en lezers/schrijvers, zelfs bij uitzonderingen.
- Extensiefuncties
import java.io.File
fun main() {
val file = File("my_file.txt")
// Schrijven naar bestand
file.writeText("Hallo, Kotlin I/O!")
file.appendText("\nVervolg van de regel.")
// Regel-voor-regel lezen
file.forEachLine { line ->
println(line)
}
// Alles lezen als tekst
val content = file.readText()
println("\nVolledige inhoud van het bestand:")
println(content)
// Gebruik maken van bufferedReader met use
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Lezen via Java Stream API
}
// Bestand kopiëren
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // Handige kopie van streams
}
}
}
Vergelijkingstabel van enkele methoden:
| Methode | Doel | Gegevenstype | Regel voor regel / Alles | Opmerking |
|---|---|---|---|---|
readBytes() |
Lezen in bytes | ByteArray |
Alles | Geschikt voor binaire gegevens |
readText() |
Lezen als tekst | String |
Alles | Handig voor tekstbestanden |
forEachLine { } |
Verwerken van elke regel | String |
Regel voor regel | Ideaal voor grote tekstbestanden |
bufferedReader() |
Buffer-geleide lezer maken | N/A | Stream | Flexibele controle, vereist use |
writeBytes() |
Bytes schrijven | ByteArray |
Alles | Geschikt voor binaire gegevens |
writeText() |
Tekst schrijven | String |
Alles / toevoegen | Handig voor tekstbestanden |
printWriter() |
Geformatteerde schrijver maken | N/A | Stream | Handig voor geformatteerde uitvoer, vereist use |
Het gebruik van use { ... } is essentieel voor veilig werken met I/O in Kotlin, omdat het resources vrijmaakt. Kotlin breidt bestaande Java-klassen (File, InputStream, OutputStream, enz.) uit met nuttige functies.