Sobes.tech
Middle

Kotlin'da fayllar va kirish/chiqish (I/O) oqimlari bilan qanday ishlash mumkin?

sobes.tech AI

AIdan javob

Kotlin standarti kutubxonasi java.io bilan ishlashni soddalashtiradigan qulay kengaytmalarni taqdim etadi.

Asosiy yondashuvlar va sinflar:

  • Fayldan o'qish:

    • File.readBytes(): Fayl mazmunini baytlar massiviga o'qiydi.
    • File.readText(): Fayl mazmunini satr sifatida o'qiydi (kodingni hisobga olgan holda).
    • File.forEachLine { ... }: Faylning har bir satrini qayta ishlaydi.
    • File.bufferedReader(): Satrma-satr o'qish uchun BufferedReader yaratadi.
    • File.inputStream(): Baytlarni o'qish uchun InputStream yaratadi.
  • Faylga yozish:

    • File.writeBytes(bytes): Baytlar massivini faylga yozadi.
    • File.writeText(text, append): Satrni faylga yozadi. append = true oxiriga qo'shish uchun.
    • File.printWriter(): Formatlangan matn yozish uchun PrintWriter yaratadi.
    • File.outputStream(): Baytlarni yozish uchun OutputStream yaratadi.
  • Oqimlar bilan ishlash:

    • InputStream.bufferedReader(): InputStreamni BufferedReader bilan o'raladi.
    • OutputStream.printWriter(): OutputStreamni PrintWriter bilan o'raladi.
    • Kontentni nusxalash uchun copyTo(outputStream) kengaytirish funksiyalari.
  • Resurslarni boshqarish (closures):

    • use { ... } kengaytirish funksiyalari oqimlar va o'quvchi/yazuvchilarni avtomatik ravishda yopadi, hatto istisno bo'lsa ham.
import java.io.File

fun main() {
    val file = File("my_file.txt")

    // Faylga yozish
    file.writeText("Salom, Kotlin I/O!")
    file.appendText("\nDavomi satr.")

    // Satrma-satr o'qish
    file.forEachLine { line ->
        println(line)
    }

    // Faylning barcha mazmunini matn sifatida o'qish
    val content = file.readText()
    println("\nFaylning to'liq mazmuni:")
    println(content)

    // bufferedReader bilan use
    file.bufferedReader().use { reader ->
        reader.lines().forEach(::println) // Java Stream API yordamida o'qish
    }

    // Faylni nusxalash
    val newFile = File("my_file_copy.txt")
    file.inputStream().use { input ->
        newFile.outputStream().use { output ->
            input.copyTo(output) // qulay nusxalash
        }
    }
}

Ba'zi metodlarning taqqoslash jadvali:

Metod Maqsad Ma'lumot turi Satrma-satr / To'liq Izoh
readBytes() Baytlar bilan o'qish ByteArray To'liq Binar ma'lumotlar uchun mos
readText() Matn sifatida o'qish String To'liq Matn fayllari uchun qulay
forEachLine { } Har bir satrni qayta ishlash String Satrma-satr Katta matn fayllari uchun ideal
bufferedReader() Buffer'langan o'quvchi yaratish N/A Oqim Moslashuvchan nazorat, use talab qiladi
writeBytes() Baytlarni yozish ByteArray To'liq Binar ma'lumotlar uchun mos
writeText() Matn yozish String To'liq / qo'shish Matn fayllari uchun qulay
printWriter() Formatlangan yozuvchi yaratish N/A Oqim Formatlangan chiqish uchun qulay, use talab qiladi

use { ... } dan foydalanish Kotlin'da I/O bilan xavfsiz ishlash uchun muhim bo'lib, resurslarni bo'shatishni kafolatlaydi. Kotlin mavjud Java sinflarini (File, InputStream, OutputStream va boshqalar) qulay funksiyalar bilan kengaytiradi.