Middle
Kako raditi sa fajlovima i tokovima ulaza/izlaza (I/O) u Kotlinu?
sobes.tech АИ
Одговор од АИ
Standardna biblioteka Kotlin-a pruža udobna proširenja za rad sa I/O, pojednostavljujući interakciju sa java.io.
Glavni pristupi i klase:
-
Čitanje iz fajla:
File.readBytes(): Čita sadržaj fajla u niz bajtova.File.readText(): Čita sadržaj fajla kao string (uzimajući u obzir kodiranje).File.forEachLine { ... }: Obradjuje svaki red fajla.File.bufferedReader(): KreiraBufferedReaderza linijsko čitanje.File.inputStream(): KreiraInputStreamza čitanje bajtova.
-
Upis u fajl:
File.writeBytes(bytes): Upisuje niz bajtova u fajl.File.writeText(text, append): Upisuje string u fajl.append = truedodaje na kraj.File.printWriter(): KreiraPrintWriterza lako formatirano pisanje.File.outputStream(): KreiraOutputStreamza upis bajtova.
-
Rad sa tokovima:
InputStream.bufferedReader(): OmotavaInputStreamuBufferedReader.OutputStream.printWriter(): OmotavaOutputStreamuPrintWriter.- Ekstenzije
copyTo(outputStream)za kopiranje sadržaja tokova.
-
Upravljanje resursima (closures):
- Ekstenzije
use { ... }obezbeđuju automatsko zatvaranje tokova i čitača/pisaca, čak i u slučaju izuzetaka.
- Ekstenzije
import java.io.File
fun main() {
val file = File("my_file.txt")
// Upis u fajl
file.writeText("Zdravo, Kotlin I/O!")
file.appendText("\nNastavak reda.")
// Čitanje red po red
file.forEachLine { line ->
println(line)
}
// Čitanje celog fajla kao tekst
val content = file.readText()
println("\nCelokupni sadržaj fajla:")
println(content)
// Korišćenje bufferedReader sa `use`
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Čitanje preko Java Stream API
}
// Kopiranje fajla
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // Udobno kopiranje tokova
}
}
}
Tabela poređenja nekih metoda:
| Metod | Svrha | Tip podataka | Red po red/komplet | Napomena |
|---|---|---|---|---|
readBytes() |
Čitanje u bajtove | ByteArray |
Kompletno | Pogodno za binarne podatke |
readText() |
Čitanje kao string | String |
Kompletno | Pogodno za tekstualne fajlove |
forEachLine { } |
Obrada svakog reda | String |
Red po red | Idealan za velike tekstualne fajlove |
bufferedReader() |
Kreiranje bufferovanog čitača | N/A | Tokovski | Fleksibilna kontrola, zahteva use |
writeBytes() |
Upis bajtova | ByteArray |
Kompletno | Pogodno za binarne podatke |
writeText() |
Upis stringa | String |
Kompletno/dodavanje | Udobno za tekstualne fajlove |
printWriter() |
Kreiranje formatiranog pisca | N/A | Tokovski | Udobno za formatirani izlaz, zahteva use |
Korišćenje use { ... } je ključno za sigurnu rad sa I/O u Kotlinu, garantujući oslobađanje resursa. Kotlin proširuje postojeće Java klase (File, InputStream, OutputStream itd.) sa udobnim funkcijama.