Kotlin Fayllar

Kotlin fayllar bilan ishlash

Ushbu qo'llanmada biz Kotlinda fayllarni qayta ishlash asoslarini muhokama qilamiz. Fayllar ma'lumotlarni xotirada saqlash uchun ishlatiladi, chunki dastur bajarilgandan so'ng, agar ular saqlanmasa, yo'qoladi. Fayl yaratish, faylda o'qish va yozishning ko'plab usullari mavjud. Biz ulardan ba'zilarini qisqacha muhokama qilamiz.

Kotlinda fayl yaratish

Kotlin Fayl yaratish – Kotlinda File.createNewFile(), File.writeText(matn:String), Files.writeBytes() va boshqalar yordamida yangi fayl yaratilishi mumkin. Kotlinda fayl yaratishning boshqa koʻplab usullari mavjud. Biz misol Kotlin dasturlari yordamida ulardan ba'zilari uchun kodni amalga oshirishni ko'rib chiqamiz.

File.createNewFile() yordamida fayl yaratish

File.createNewFile() agar u mavjud bo'lmasa, yangi fayl yaratadi va true ning mantiqiy qiymatini qaytaradi. Agar fayl taqdim etilgan yo'lda allaqachon mavjud bo'lsa, usul "false" ni qaytaradi. Yaratilgan fayl bo'sh va unga yozilgan nol baytga ega. File.createNewFile() dan foydalanish yangi fayl yaratish uchun eng yaxshi va xavfsiz protsedura hisoblanadi. Ushbu qo'llanmada ko'rib chiqiladigan boshqa usullarning ko'pchiligi, agar mavjud bo'lsa, faylni qayta yozadi, bu esa ba'zi hollarda istalmagan mavjud ma'lumotlarning yo'qolishiga olib kelishi mumkin.

1-misol: Quyidagi misolda data.txt nomi bilan yangi fayl yaratishga harakat qilamiz. Birinchi marta fayl yaratiladi va rost qaytariladi. Biz faylni ikkinchi marta yaratmoqchi bo'lganimizda, data.txt fayli allaqachon yaratilgan bo'lsa, biz noto'g'ri qilgan bo'lamiz.

import java.io.File
fun main(args: Array<String>) { 
    val fileName = "data.txt" 
    var file = File(fileName) 
    // yangi fayl yaratish
    val isNewFileCreated :Boolean = file.createNewFile() 
    if(isNewFileCreated){
        println("$fileName nomli fayl yaratildi.")
    } else{
        println("$fileName nomli fayl avvaldan mavjud edi.")
    }
    // fayl yaratish
    val isFileCreated :Boolean = file.createNewFile() 
    if(isFileCreated){
        println("$fileName fayl yaratilgan.")
    } else{
        println("$fileName fayl mavjud.")
    }
}
data.txt nomli fayl yaratildi. data.txt fayl mavjud.

File.writeText() yordamida fayl yaratish

File.writeText() agar u mavjud bo'lmasa, yangi fayl yaratadi va matnni (string argumenti) faylga yozadi. Agar bo'sh satr taqdim etilsa, fayl yaratiladi va unga hech narsa yozilmaydi. Odatiy bo'lib, fayl UTF-8 sifatida kodlangan. Boshqa har qanday belgilar to'plamini ikkinchi argument sifatida o'tkazish faylni mos ravishda kodlaydi.

Eslatma : Agar fayl allaqachon mavjud bo'lsa, u qayta yoziladi va mavjud ma'lumotlar yo'qoladi.

Agar fayl allaqachon mavjud emasligiga ishonchingiz komil bo'lsa yoki mavjud ma'lumotlarni qayta yozish ilovangizga ta'sir qilmasa, ushbu usuldan foydalaning.

2-misol: Ushbu misolda biz yangi Fayl yaratish uchun File.writeText() dan foydalanamiz.

import java.io.File
fun main(args: Array<String>) { 
    val fileName = "data.txt"
    var file = File(fileName) 
    // yangi fayl yaratish
    file.writeText("")
}

Faylga ma'lumotlarni yozish uchun writeText() ga argument sifatida biz bo'sh satr berdik. Siz ushbu faylga yozmoqchi bo'lgan qatorni taqdim etishingiz mumkin.

File.writeText() yordamida fayl yaratish

File.writeBytes() agar u mavjud bo'lmasa, yangi fayl yaratadi va yaratilgan faylga taqdim etilgan ByteArray xom baytlarini yozadi. Agar bo'sh ByteArray taqdim etilsa, fayl yaratiladi va unga hech narsa yozilmaydi.

Eslatma : Agar fayl allaqachon mavjud bo'lsa, u qayta yoziladi va mavjud ma'lumotlar yo'qoladi.

Agar fayl allaqachon mavjud emasligiga ishonchingiz komil bo'lsa yoki mavjud ma'lumotlarni qayta yozish ilovangizga ta'sir qilmasa, ushbu usuldan foydalaning.

3-misol: Ushbu misolda biz yangi Fayl yaratish uchun File.writeBytes() dan foydalanamiz.

import java.io.File
fun main(args: Array<String>) { 
    val fileName = "data.txt"
    var file = File(fileName) 
    // fayl yaratish
    file.writeBytes(ByteArray(0))
}

Faylga ma'lumotlarni yozish uchun writeBytes() ga argument sifatida bo'sh bayt massivini berdik. Siz ushbu faylga yozmoqchi bo'lgan ByteArray ni taqdim etishingiz mumkin.

Kotlinda fayl mavjudligini tekshirish

Kotlin - Fayl mavjudligini tekshiring: Kotlinda fayl allaqachon mavjudligini tekshirish uchun File.exists() dan foydalaning. File.exists() mantiqiy qiymatni qaytaradi. Agar fayl mavjud bo'lsa, u "true", agar fayl mavjud bo'lmasa, "false" qiymatini qaytaradi.

4-misol: Quyidagi misolda “data.txt” fayli mavjudligini tekshiramiz.

import java.io.File 
fun main(args: Array<String>) {
    val fileName = "data.txt"
    var file = File(fileName)
    var fileExists = file.exists() 
    if(fileExists){
        print("$fileName fayl mavjud.")
    } else {
        print("$fileName fayl mavjud emas.")
    }
}
data.txt fayl mavjud.

Kotlinda faylini o'qish - 6 xil usul

Kotlin faylini o'qish - Kotlindagi fayl mazmunini java.io.File sinfining standart usullari yoki Kotlin java.io.File kengaytmasi sifatida taqdim etgan usullar yordamida o'qishimiz mumkin. Biz fayl mazmunini o'qish uchun Kotlin tomonidan Javaning java.io.File sinfiga taqdim etilgan kengaytma usullari uchun misol dasturlarini ko'rib chiqamiz.

File.bufferedReader() fayl mazmunini BufferedReaderga qanday o'qish mumkin

  1. Fayl klassi konstruktoriga argument sifatida uzatilgan fayl joylashuvi bilan fayl obyektini tayyorlang.
  2. File.bufferedReader fayl mazmunini o'qish uchun yangi BufferedReaderni qaytaradi.
  3. Fayl mazmunini o'qish uchun BufferedReader.readLines() dan foydalaning.

Kotlin dasturi

import java.io.File  
fun main(args: Array<String>) {
    val file = File("input"+File.separator+"contents.txt")
    val bufferedReader = file.bufferedReader()
    val text:List<String> = bufferedReader.readLines()
    for(line in text){
        println(line)
    }
}
Salom yosh dasturchi! Xush kelibsiz Uzbekdevs saytiga.

Fayl mazmuni konsolga chop etiladi.

File.forEachLine() Kotlinda faylni satr bo'yicha o'qish

  1. Fayl konstruktoriga argument sifatida berilgan joylashuv bilan fayl obyektini tayyorlang.
  2. File.forEachLine funktsiyasidan foydalaning va faylning har bir satrini o'qing.

Kotlin dasturi

import java.io.File
fun main(args: Array<String>) {
    val file = File("input"+File.separator+"contents.txt")
    file.forEachLine { println(it) }
}
Salom yosh dasturchi! Xush kelibsiz Uzbekdevs saytiga.

Fayl mazmuni konsolga chop etiladi.

File.inputStream() InputStreamga fayl mazmunini o'qish

  1. Fayl klassi konstruktoriga argument sifatida uzatilgan fayl joylashuvi bilan fayl obyektini tayyorlang.
  2. File.inputStream() fayl uchun yangi InputStreamni qaytaradi.
  3. Keyin siz oqimdan baytlarni o'qishingiz va uni Stringga aylantirishingiz mumkin. Ushbu qator faylning mazmunidir.

Fayl tarkibini InputStreamga, keyin esa Stringga o'qish.

Kotlin dasturi

import java.io.File
import java.io.InputStream
fun main(args: Array<String>) {
    val file = File("input"+File.separator+"contents.txt")
    var ins:InputStream = file.inputStream()
    var content = ins.readBytes().toString(Charset.defaultCharset())
    println(content)
}

Fayl mazmuni konsolga chop etiladi.

File.readBytes() faylning butun mazmunini ByteArray sifatida qaytaradi

  1. Fayl konstruktoriga argument sifatida berilgan joylashuv bilan fayl ob'ektini tayyorlang.
  2. ByteArray olish uchun File.readBytes() funksiyasidan foydalaning. Bu bayt massivida barcha fayl mazmuni mavjud.
  3. Bayt massivini takrorlash va fayl mazmuniga bayt-bayt kirish uchun for loop dan foydalaning.

Kotlin dasturi

import java.io.File 
fun main(args: Array<String>) {
    val file = File("input"+File.separator+"contents.txt")
    var bytes:ByteArray = file.readBytes()
    for(byte in bytes){
        print(byte.toChar())
    }
}

Fayl mazmuni konsolga chop etiladi.

File.readLines() faylning butun mazmunini qatorlar roʻyhati sifatida qaytaradi

  1. Fayl konstruktoriga argument sifatida berilgan joylashuv bilan fayl obyektini tayyorlang.
  2. Matn faylidagi barcha satrlarni Stringlar roʻyhati sifatida olish uchun File.readLines() funksiyasidan foydalaning.
  3. Faylning har bir satrini o'qish uchun for loop yordamida ro'yhatga kirishingiz mumkin.

Kotlin dasturi

import java.io.File
fun main(args: Array<String>) {
    val file = File("input"+File.separator+"contents.txt")
    var lines:List<String> = file.readLines()
    for(line in lines){
        println(line)
    }
}

Fayl mazmuni konsolga chop etiladi.

File.readText() faylning butun mazmunini bitta satr sifatida qaytaradi

Bundan tashqari, faylning butun mazmunini bitta satr sifatida o'qishingiz mumkin. Ushbu bosqichlarni bajaring.

  1. Fayl konstruktoriga argument sifatida berilgan joylashuv bilan fayl obyektini tayyorlang.
  2. Faylning butun mazmunini String sifatida qaytaradigan File.readText() funksiyasidan foydalaning.

Kotlin dasturi

import java.io.File
fun main(args: Array<String>) {
    val file = File("input"+File.separator+"contents.txt")
    var content:String = file.readText()
    println(content)
}

Fayl mazmuni konsolga chop etiladi.

Faylga yozish

Siz faylga Kotlin dasturlash tilida yozishingiz mumkin. Odatda faylga satr yoki ma'lumotlar yoziladi. Kotlin tomonidan taqdim etilgan kengaytma funktsiyalari (yoki idiomatik yo'l yoki Kotlin usulini ayting) yordamida Kotlindagi faylga yozish mumkin yoki faylga tarkib yozadigan mavjud Java kodidan ham foydalanish mumkin. Ushbu Kotlin qo'llanmasida biz faylga yozish uchun PrintWriter kabi Java sinflaridan qanday foydalanishni va Kotlin uslubidagi kengaytma funksiyalaridan foydalangan holda ko'proq misollarni ko'rib chiqamiz.

5-misol: Ushbu misolda biz satrni olamiz va uni yordamida faylga yozamiz. Quyidagi qadamlarni bajaring:

  1. Ma'lumotlaringizni o'zgaruvchidagi satr sifatida tayyorlang.
  2. PrintWriter obyektini ishga tushiring.
  3. PrintWriter.append() funksiyasidan foydalanib faylga satr qo'shing.
  4. Kompilyatorni yoping.

Kotlin dasturi

import java.io.PrintWriter
fun main(args: Array<String>) {
    var content = "Salom yosh dasturchi! Xush kelibsiz Uzbekdevs saytiga."
    val writer = PrintWriter("file.txt")
    writer.append(content)
    writer.close()
}

PrintWriter() argumenti uchun ko'rsatilgandek file.txt nomli yangi fayl kontent bilan yaratilishi kerak. Agar fayl allaqachon mavjud bo'lsa, avval fayl tarkibi tozalanadi, so'ngra yangi tarkib faylga yoziladi.

6-misol: Bu misolda java.io.File sinfiga Kotlin kengaytmali printWriter funksiyasidan foydalanamiz. Quyida faylga yozish jarayonini bajaring.

  1. Kontentingizni qator sifatida saqlang.
  2. Fayl nomini Fayl konstruktoriga o'tkazing.
  3. Keyin faylda printWriter() ni chaqiring.
  4. Foydalanish bilan faylga tarkibni yozuvchi yozuvchidagi println (kontent) ga qo'ng'iroq qiling.

Kotlin dasturi

import java.io.File
fun main(args: Array<String>) {
    var content = "Salom yosh dasturchi! Xush kelibsiz Uzbekdevs saytiga." 
    File("file.txt").printWriter().use { out ->
        out.println(content)
    }
}

7-misol: Oldingi misolga o'xshab, biz yozuvchi obyektni olish uchun java.io.File.bufferedWriter() kengaytma funksiyasidan foydalanishimiz va faylga tarkib yozish uchun yozuvchi obyektida write() funksiyasidan foydalanishimiz mumkin.

Kotlin dasturi

import java.io.File
fun main(args: Array<String>) {
    var content = "Salom yosh dasturchi! Xush kelibsiz Uzbekdevs saytiga."
    File("file.txt").bufferedWriter().use { out ->
        out.write(content)
    }
}

8-misol: Agar siz faylga faqat matn yozayotgan bo'lsangiz, java.io.File.writeText() kengaytma funksiyasidan foydalanishingiz mumkin. Quyidagi misolda biz faylga matn yozish uchun ushbu kengaytma funksiyasidan foydalanganmiz.

Kotlin dasturi

import java.io.File
fun main(args: Array<String>) {
    var content = "Salom yosh dasturchi! Xush kelibsiz Uzbekdevs saytiga." 
    File("file.txt").writeText(content)
}

Kotlindagi faylga matn qo'shish

Kotlin faylga matn qo'shishni Kotlin kengaytmasi funksiyasidan foydalanib, File.appendText() bir qator kodli dastur yordamida o'rganing. Hisobotga disk raskadrovka qatorini yoki ba'zi bir jurnal faylini va hokazolarni qo'shishingiz kerak bo'lgan stsenariylar bo'lishi mumkin. Bunday stsenariylarda Kotlinning java.io.File kengaytmasi funksiyasi appendText(String text) matnni asl nusxaga qo'shishga yordam beradi.

Sintaksis

fun File.appendText(?text: String,  ?charset: Charset = Charsets.UTF_8)

Foydalanish:

File(filename).appendText(textToBeAppended, charset)

9-misol:

import java.io.File
fun main(args: Array) {
    var content:String = " Bu yerda dasturlash tillariga oid ma'lumotlar bor."
    File("file.txt").appendText(content)
}

Quyida bajarilishidan oldin faylning mazmuni keltirilgan.

file.txt
Salom yosh dasturchi! Xush kelibsiz Uzbekdevs saytiga.

Quyida bajarilgandan so'ng faylning mazmuni keltirilgan.

file.txt
Salom yosh dasturchi! Xush kelibsiz Uzbekdevs saytiga.Bu yerda dasturlash tillariga oid ma'lumotlar bor.

Kotlinda katalogdagi barcha fayllarni takrorlash

Kotlin.io ni yaratish uchun java.io.File kengaytmasi funksiyalaridan foydalanamiz. walk(), walkBottomUp, walkTopDown(). FileTreeWalk lardan biz katalog va uning mazmunini aylanib o'tish uchun iteratordan foydalanamiz. Uchta funktsiyaning funksionalligi deyarli bir xil bo'lib, ular tarkibni takrorlash tartibidan tashqari. Quyidagi misollarda biz katalogdagi fayllarni iterativ ravishda ro'yhatga olish uchun quyida ko'rsatilgandek papkani olamiz.

Kotlin - Kotlin misoli - Kotlin qo'llanmasi - www.tutorialkart.com yordamida katalogdagi barcha fayllarni aylanib o'ting yoki takrorlang

java.io.File.walk() yordamida barcha fayllarni takrorlash

Ushbu misolda biz katalogdagi fayllarni va uning pastki kataloglarini rekursiv ravishda o'tkazish uchun File.walk() usulidan foydalanamiz.

Misol:

import java.io.File
fun main(args: Array) {
    File("/home/arjun/tutorials/").walk().forEach {
        println(it)
    }
}
/home/tutorialkart/tutorials /home/tutorialkart/tutorials/info.txt /home/tutorialkart/tutorials/list.txt /home/tutorialkart/tutorials/android /home/tutorialkart/tutorials/android/textview.txt /home/tutorialkart/tutorials/android/button.txt /home/tutorialkart/tutorials/kotlin /home/tutorialkart/tutorials/kotlin/constructor.txt /home/tutorialkart/tutorials/kotlin/expressions.txt /home/tutorialkart/tutorials/java /home/tutorialkart/tutorials/java/polymorphism.txt

java.io.File.walkBottomUp() yordamida barcha fayllarni takrorlash

Ushbu misolda biz ma'lum bir katalog va uning pastki kataloglaridagi fayllarni ro'yhatga olish uchun File.walkBottomUp() usulidan foydalanamiz.

Misol:

import java.io.File
fun main(args: Array) {
    File("/home/arjun/tutorials/").walkBottomUp().forEach {
        println(it)
    }
}
/home/tutorialkart/tutorials/info.txt /home/tutorialkart/tutorials/list.txt /home/tutorialkart/tutorials/android/textview.txt /home/tutorialkart/tutorials/android/button.txt /home/tutorialkart/tutorials/android /home/tutorialkart/tutorials/kotlin/constructor.txt /home/tutorialkart/tutorials/kotlin/expressions.txt /home/tutorialkart/tutorials/kotlin /home/tutorialkart/tutorials/java/polymorphism.txt /home/tutorialkart/tutorials/java /home/tutorialkart/tutorials

java.io.File.walkTopDown() yordamida barcha fayllarni takrorlash

Ushbu misolda biz ma'lum bir katalog va uning pastki kataloglaridagi fayllarni ro'yhatga olish uchun File.walkTopDown() usulidan foydalanamiz.

Misol:

import java.io.File
fun main(args: Array) {
    File("/home/arjun/tutorials/").walkTopDown().forEach {
        println(it)
    }
}
/home/tutorialkart/tutorials /home/tutorialkart/tutorials/info.txt /home/tutorialkart/tutorials/list.txt /home/tutorialkart/tutorials/android /home/tutorialkart/tutorials/android/textview.txt /home/tutorialkart/tutorials/android/button.txt /home/tutorialkart/tutorials/kotlin /home/tutorialkart/tutorials/kotlin/constructor.txt /home/tutorialkart/tutorials/kotlin/expressions.txt /home/tutorialkart/tutorials/java /home/tutorialkart/tutorials/java/polymorphism.txt

Kotlinda rekursiv ravishda o'chirish

Kotlindagi fayl/papka va uning bolalarini oʻchirish uchun java.io.File, File.deleteRecursively() kengaytmasi funksiyasidan foydalaning.

Sintaksis:

fun File.deleteRecursively(): Boolean (source)

Agar operatsiya muvaffaqiyatli bo'lsa, bu funktsiya rost, aks holda noto'g'ri qiymatini qaytaradi. Amaliyot davomidagi har qanday xatolik ushbu katalogdagi fayllarning qisman o'chirilishiga olib kelishi mumkin.

Misol: Quyidagi misolda biz File.deleteRecursively() usuli yordamida “papka” da mavjud bo‘lgan barcha fayl va papkalarni o‘chirib tashlaymiz, shuningdek, “papka” ning o‘zini rekursiv tarzda o‘chirib tashlaymiz.

import java.io.File
fun main(args: Array<String>) {
    var fileA = File("papkaA")
    fileA.deleteRecursively()
}

Ushbu dasturni ishga tushirganingizda, ichidagi barcha fayl va papkalar, shu jumladan A papkasi o'chiriladi.