Sobes.tech
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 üçün BufferedReader yaradır.
    • File.inputStream(): Baytları oxumaq üçün InputStream yaradır.
  • Fayla yazma:

    • File.writeBytes(bytes): Bayt massivini fayla yazır.
    • File.writeText(text, append): Sətiri fayla yazır. append = true isə əlavə edir.
    • File.printWriter(): Formatlaşdırılmış mətn yazmaq üçün PrintWriter yaradır.
    • File.outputStream(): Baytlar yazmaq üçün OutputStream yaradır.
  • Axınlarla işləmək:

    • InputStream.bufferedReader(): InputStream-i BufferedReader-ə çevirir.
    • OutputStream.printWriter(): OutputStream-i PrintWriter-ə ç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.