Middle
Kotlin-də fayllar və giriş/çıxış (I/O) axınları ilə necə işləmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin standart kitabxanası I/O ilə işləmək üçün rahat genişlənmələr təqdim edir və java.io ilə qarşılıqlı əlaqəni sadələşdirir.
Əsas yanaşmalar və siniflər:
-
Fayldan oxuma:
File.readBytes(): Faylın məzmununu bayt massivinə oxuyur.File.readText(): Faylın məzmununu sətir kimi oxuyur (kodlaşdırmanı nəzərə alaraq).File.forEachLine { ... }: Fayldakı hər sətiri emal edir.File.bufferedReader(): Sətir-sətir oxuma üçünBufferedReaderyaradır.File.inputStream(): Baytları oxumaq üçünInputStreamyaradır.
-
Fayla yazma:
File.writeBytes(bytes): Bayt massivini fayla yazır.File.writeText(text, append): Sətiri fayla yazır.append = trueisə əlavə edir.File.printWriter(): Formatlaşdırılmış mətn yazmaq üçünPrintWriteryaradır.File.outputStream(): Baytlar yazmaq üçünOutputStreamyaradır.
-
Axınlarla işləmək:
InputStream.bufferedReader():InputStream-iBufferedReader-ə çevirir.OutputStream.printWriter():OutputStream-iPrintWriter-ə çevirir.copyTo(outputStream)genişlənmə funksiyaları axınların məzmununu kopyalamaq üçün.
-
Resursların idarə olunması (closure):
use { ... }genişlənmə funksiyaları axınların və oxuyucuların/yazıcıların avtomatik bağlanmasını təmin edir, hətta istisnalar olsa belə.
import java.io.File
fun main() {
val file = File("my_file.txt")
// Fayla yazma
file.writeText("Salam, Kotlin I/O!")
file.appendText("\nDavam edən sətir.")
// Fayldan sətir-sətir oxuma
file.forEachLine { line ->
println(line)
}
// Bütün faylı mətn kimi oxuma
val content = file.readText()
println("\nFaylın bütün məzmunu:")
println(content)
// `use` ilə bufferedReader istifadə
file.bufferedReader().use { reader ->
reader.lines().forEach(::println) // Java Stream API ilə oxuma
}
// Faylın kopyalanması
val newFile = File("my_file_copy.txt")
file.inputStream().use { input ->
newFile.outputStream().use { output ->
input.copyTo(output) // Axınların rahat kopyalanması
}
}
}
Bəzi metodların müqayisə cədvəli:
| Metod | Təyinatı | Məlumat tipi | Sətir-sətir/ümumi | Qeyd |
|---|---|---|---|---|
readBytes() |
Bayt olaraq oxuma | ByteArray |
Ümumi | İkili məlumatlar üçün uyğundur |
readText() |
Mətn kimi oxuma | String |
Ümumi | Mətn faylları üçün əlverişlidir |
forEachLine { } |
Hər sətiri emal etmək | String |
Sətir-sətir | Böyük mətn faylları üçün idealdır |
bufferedReader() |
Bufferli oxuyucu yaratmaq | N/A | Axınlı | Elastik nəzarət, use tələb edir |
writeBytes() |
Bayt yazmaq | ByteArray |
Ümumi | İkili məlumatlar üçün uyğundur |
writeText() |
Sətir yazmaq | String |
Ümumi/əlavə | Mətn faylları üçün əlverişlidir |
printWriter() |
Formatlı yazı üçün yaradıcı | N/A | Axınlı | Formatlı çıxış üçün əlverişli, use tələb edir |
use { ... } istifadə etmək Kotlin-də I/O ilə təhlükəsiz işləmək üçün əsasdır və resursların sərbəst buraxılmasını təmin edir. Kotlin mövcud Java siniflərini (File, InputStream, OutputStream və s.) rahat funksiyalarla genişləndirir.