Middle
Cum să lucrezi cu fișiere și fluxuri de intrare/ieșire (I/O) în Kotlin?
sobes.tech AI
Răspuns de la AI
Biblioteca standard Kotlin oferă extensii convenabile pentru lucru cu I/O, simplificând interacțiunea cu java.io.
Abordări principale și clase:
-
Citirea din fișier:
File.readBytes(): Citește conținutul fișierului într-un array de bytes.File.readText(): Citește conținutul fișierului ca șir de caractere (luând în considerare codificarea).File.forEachLine { ... }: Procesează fiecare linie a fișierului.File.bufferedReader(): Creează unBufferedReaderpentru citire linie cu linie.File.inputStream(): Creează unInputStreampentru citirea de bytes.
-
Scriere în fișier:
File.writeBytes(bytes): Scrie un array de bytes în fișier.File.writeText(text, append): Scrie un șir de caractere în fișier.append = truepentru adăugare.File.printWriter(): Creează unPrintWriterpentru scriere formatată.File.outputStream(): Creează unOutputStreampentru scriere de bytes.
-
Lucru cu fluxuri:
InputStream.bufferedReader(): Învelește unInputStreamîntr-unBufferedReader.OutputStream.printWriter(): Învelește unOutputStreamîntr-unPrintWriter.- Funcții de extensie
copyTo(outputStream)pentru copierea conținutului între fluxuri.
-
Gestionarea resurselor (closures):
- Funcții de extensie
use { ... }pentru închiderea automată a fluxurilor și cititorilor/scrierilor, chiar și în caz de excepții.
- Funcții de extensie
import java.io.File
fun main() {
val file = File("my_file.txt")
// Scriere în fișier
file.writeText("Salut, Kotlin I/O!")
file.appendText("\nContinuarea liniei.")
// Citire linie cu linie
file.forEachLine { line ->
println(line)
}
// Citire întreg conținut ca text
val content = file.readText()
println("\nConținutul complet al fișierului:")
println(content)
// Utilizare bufferedReader cu use
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Citire prin API-ul Stream de Java
}
// Copiere fișier
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // Copiere convenabilă a fluxurilor
}
}
}
Tabel comparativ pentru unele metode:
| Metodă | Scop | Tip de date | Linie pentru linie / Întreg | Notă |
|---|---|---|---|---|
readBytes() |
Citire în bytes | ByteArray |
Întreg | Potrivit pentru date binare |
readText() |
Citire ca text | String |
Întreg | Convenabil pentru fișiere text |
forEachLine { } |
Procesare fiecare linie | String |
Linie pentru linie | Ideal pentru fișiere text mari |
bufferedReader() |
Creare cititor bufferizat | N/A | Flux | Control flexibil, necesită use |
writeBytes() |
Scriere bytes | ByteArray |
Întreg | Potrivit pentru date binare |
writeText() |
Scriere text | String |
Întreg / adăugare | Convenabil pentru fișiere text |
printWriter() |
Creare scriitor formatat | N/A | Flux | Util pentru ieșire formatată, necesită use |
Utilizarea use { ... } este esențială pentru lucrul sigur cu I/O în Kotlin, garantând eliberarea resurselor. Kotlin extinde clasele Java existente (File, InputStream, OutputStream etc.) cu funcții utile.