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.")
}
}
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.")
}
}
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
- Fayl klassi konstruktoriga argument sifatida uzatilgan fayl joylashuvi bilan fayl obyektini tayyorlang.
- File.bufferedReader fayl mazmunini o'qish uchun yangi BufferedReaderni qaytaradi.
- 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)
}
}
Fayl mazmuni konsolga chop etiladi.
File.forEachLine() Kotlinda faylni satr bo'yicha o'qish
- Fayl konstruktoriga argument sifatida berilgan joylashuv bilan fayl obyektini tayyorlang.
- 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) }
}
Fayl mazmuni konsolga chop etiladi.
File.inputStream() InputStreamga fayl mazmunini o'qish
- Fayl klassi konstruktoriga argument sifatida uzatilgan fayl joylashuvi bilan fayl obyektini tayyorlang.
- File.inputStream() fayl uchun yangi InputStreamni qaytaradi.
- 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
- Fayl konstruktoriga argument sifatida berilgan joylashuv bilan fayl ob'ektini tayyorlang.
- ByteArray olish uchun File.readBytes() funksiyasidan foydalaning. Bu bayt massivida barcha fayl mazmuni mavjud.
- 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
- Fayl konstruktoriga argument sifatida berilgan joylashuv bilan fayl obyektini tayyorlang.
- Matn faylidagi barcha satrlarni Stringlar roʻyhati sifatida olish uchun File.readLines() funksiyasidan foydalaning.
- 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.
- Fayl konstruktoriga argument sifatida berilgan joylashuv bilan fayl obyektini tayyorlang.
- 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:
- Ma'lumotlaringizni o'zgaruvchidagi satr sifatida tayyorlang.
- PrintWriter obyektini ishga tushiring.
- PrintWriter.append() funksiyasidan foydalanib faylga satr qo'shing.
- 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.
- Kontentingizni qator sifatida saqlang.
- Fayl nomini Fayl konstruktoriga o'tkazing.
- Keyin faylda printWriter() ni chaqiring.
- 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.
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)
}
}
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)
}
}
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)
}
}
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.