Middle
Kaip dirbti su failais ir įvesties/išvesties (I/O) srautais Kotlin?
sobes.tech AI
Atsakymas iš AI
Kotlin standartinė biblioteka teikia patogius išplėtinius metodus darbui su I/O, supaprastina sąveiką su java.io.
Pagrindiniai požiūriai ir klasės:
-
Failo skaitymas:
File.readBytes(): skaito failo turinį į baitų masyvą.File.readText(): skaito failo turinį kaip eilutę (atsižvelgiant į koduotę).File.forEachLine { ... }: apdoroja kiekvieną failo eilutę.File.bufferedReader(): sukuriaBufferedReadereilutėms skaityti.File.inputStream(): sukuriaInputStreambaitų skaitymui.
-
Rašymas į failą:
File.writeBytes(bytes): rašo baitų masyvą į failą.File.writeText(text, append): rašo eilutę į failą.append = truepridėjimui pabaigoje.File.printWriter(): sukuriaPrintWriterformatuotam tekstui rašyti.File.outputStream(): sukuriaOutputStreambaitų rašymui.
-
Srautų valdymas:
InputStream.bufferedReader(): apvyniojaInputStreamįBufferedReader.OutputStream.printWriter(): apvyniojaOutputStreamįPrintWriter.- plėtros funkcijos
copyTo(outputStream)srautų turinio kopijavimui.
-
Resursų valdymas (closures):
- plėtros funkcijos
use { ... }automatiškai uždaro srautus ir skaitytuvus/rašytuvus, net ir išimčių atveju.
- plėtros funkcijos
import java.io.File
fun main() {
val file = File("my_file.txt")
// Rašymas į failą
file.writeText("Sveiki, Kotlin I/O!")
file.appendText("\nTęsiama eilutė.")
// Skaitymas iš failo eilutėmis
file.forEachLine { line ->
println(line)
}
// Visas failo turinys kaip eilutė
val content = file.readText()
println("\nVisas failo turinys:")
println(content)
// Naudojant bufferedReader su use
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Java Stream API naudojimas
}
// Failo kopijavimas
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // Patogus srautų kopijavimas
}
}
}
Lyginamosios kai kurios metodų funkcijos:
| Metodas | Paskirtis | Duomenų tipas | Eilutinis / Visas | Pastaba |
|---|---|---|---|---|
readBytes() |
Skaityti baitus | ByteArray |
Visas | Tinka binariniams duomenims |
readText() |
Skaityti kaip eilutę | String |
Visas | Patogu tekstiniams failams |
forEachLine { } |
Apdoroti kiekvieną eilutę | String |
Eilutinis | Idealiai dideliems tekstiniams failams |
bufferedReader() |
Sukurti buferizuotą skaitytuvą | N/A | Srautas | Lanksti kontrolė, reikalauja use |
writeBytes() |
Rašyti baitus | ByteArray |
Visas | Tinka binariniams duomenims |
writeText() |
Rašyti eilutę | String |
Visas / Pridėjimas | Patogu tekstiniams failams |
printWriter() |
Sukurti formatuotą rašytuvą | N/A | Srautas | Patogu formatuotam išvedimui, reikalauja use |
Naudojant use { ... } yra pagrindinis saugaus darbo su I/O būdas Kotlin, garantuojantis išteklių atlaisvinimą. Kotlin praplečia esamus Java klases (File, InputStream, OutputStream ir t.t.) patogiais funkcijomis.