Dart Fayl

Fayl – doimiy xotiraga biror nom bilan saqlab qo’yilgan ma’lumot.

Hayotimiz davomida biz ishlatayotgan qurilmalarda turli fayllarda ma’lumotlar saqlanadi va biz ulardan kerakli vaqtda foydalanamiz. Dasturlarda ham shunday. Ular o’zlari yoki biror inson aralashuvi orqali kerakli fayllarni yaratadi, o’chiradi yoki foydalanadi. Bunda dasturlar qanday qilib fayllardan ma’lumotlarni o’qiydi, yozadi, yaratadi yoki o’chiradi? Shuni batafsil ko’rib o’tamiz.

Har bir dasturlash tilida bo’lgani singari Dart dasturlash tilida ham fayllar bilan ishlash imkoniyati mavjud. Dart dasturlash tilida fayl tizimi bilan ishlash uchun “dart:io” kutubxonasi javob beradi va qo’shimcha bir qancha ko’plab imkoniyatlarga ega. Fayllar bilan ishlash uchun File sinfi ishlatiladi.

Biror nomdagi fayl bu obyekt hisoblanib, File sinfidan olingan va u quyidagi tarzda yaratiladi : File(String path). path ga biz yaratmoqchi bo’lgan faylning to’liq nomi yoziladi va yo’li ham to’liq berib ketilishi mumkin. Masalan,

import 'dart:io';

void main() {
File site = File("uzbekdevs.txt");
print(site.path);
}
>> uzbekdevs.txt

import 'dart:io'; – kutubxonasini qo’shish orqali fayllar bilan ishlashimiz mumkin.

File site = File("uzbekdevs.txt"); – main funksiyasida “uzbekdevs.txt” faylidan foydalanuvchi File obyektini yaratmoqdamiz. File sinfi orqali yaratilgan obyektdan uning path metodi orqali faylga yo’lni aniqlay olamiz. Bu path metodi esa faylga nisbiy yo’lni ko’rsatadi va absolyut yo’lni esa absolute.path metodi orqali aniqlay olamiz. Bu esa bizga faylga bo’lgan to’liq manzilni ko’rsatadi.

import 'dart:io';

void main() async {
File site = File("uzbekdevs.txt");
print(site.absolute.path);
}
>> /home/uzbek-coder-2022/Documents/projects/uzbekdevs.txt

Fayl yaratish va o’chirish

Fayl yaratish uchun create() funksiyasidan foydalaniladi:

Future<File> create({bool recursive = false, bool exclusive = false})

import 'dart:io';

void main() {
File site = File("uzbekdevs.txt");
site.create();
print("Fayl yaratildi");
}
>> Fayl yaratildi

uzbekdevs.txt deb nomlangan fayl yaratiladi. Fayl yaratish vaqtida create funksiyasini 2 ta parametri mavjud bo’lib, exclusive va recursive.

  • Exclusive true bo’lsa, bu fayl avval mavjud bo’lganda xato beradi.
  • Recursive true bo’lsa, faylga ko’rsatilgan manzildagi ayrim kataloglar mavjud bo’lmagan holatda yaratib ketiladi.

Fayldan ma’lumotlarni boshqa faylga nusxalash uchun copy() funksiyasi foydalaniladi.

Future<File> copy(String newPath) – newPath bu yangi fayl manzili bo’lib, barcha ma’lumotlar mana shu faylga ko’chiriladi.

import 'dart:io';

void main() async {
File site = await File("uzbekdevs.txt");
File copySite = await site.copy("copy.txt");
print("Fayldagi ma'lumotlar nusxalandi");
}
>> Fayldagi ma’lumotlar nusxalandi

Fayl mavjudligini tekshirish uchun esa exists() funksiyasini ishlatamiz. Bu funksiya natija sifatida bool turida qiymat qaytaradi : true (fayl yaratilgan) va false (fayl yaratilmagan).

import 'dart:io';

void main() async {
print(await File("uzbekdevs.txt").exists());
}
>> true

Fayl yaratilganligi tekshirib olib, uni o’chirib yubora ham olamiz. Nega ? Agarda mavjud bo’lmagan faylni o’chirib yuborish uchun harakat qilinsa Dart kompilyatori PathNotFoundException istisnosini chiqaradi. Fayllarni o’chirish uchun delete() funksiyasi qo’llaniladi.

import 'dart:io';

void main() async {
File site = File("uzbekdevs.txt");
if (await site.exists()) {
site.delete();
print("Fayl o'chirildi!");
} else {
print("Fayl yaratilmagan!");
}
}

Faylga yozish

Fayllarga yozish uchun writeAsString() funksiyasi qo’llaniladi.

Future<File> writeAsString(
String contents, {
FileMode mode = FileMode.write,
Encoding encoding = utf8,
bool flush = false,
})

Funksiya parametrlarini ham birma-bir ko’rib ketsak:

  • Contents – faylga yozilishi kerak bo’lgan satr
  • Mode – fayl rejimi boshlang’ich holatda FileMode.write qiymati o’rnatilgan bo’ladi. Bu rejim faylga ma’lumot yozish imkonini beradi. Fayl rejimi fayl ustida qanday vazifa bajarilishini belgilaydi.
  • Encoding – fayl qaysi formatda shifrlanganligi. Shu parametr qiymatini to’g’ri ko’rsatish orqali fayldagi ma’lumotlar ustida kerakli vazifani bajara olamiz.

Bu usulda ma’lumot faylga yozilgan vaqtda fayldagi barcha eski ma’lumotlar o’chib ketadi va ya’ni qayta yoziladi deb tushunish mumkin. Agarda fayl davomiga ma’lumot qo’shib yozib ketmoqchi bo’lsangiz quyidagi usulni qo’llang ya’ni mode parametriga FileMode.append qiymatini bering.

Fayldan o’qish

Matnli fayldan ikki xil usulda ma’lumotlarni o’qish mumkin : satrlar ro’yxati sifatida va bitta butun bir qatorli satr tarzida. Satrma-satr o’qish uchun asinxron readAsLines() funksiyasidan foydalaniladi va biror kodlash turini parametri sifatida berish mumkin:

List<String> readAsLinesSync({Encoding encoding = utf8}) – bu funksiya orqali fayldagi har bir qatorni ro’yxat elementi sifatida olamiz.

import 'dart:io';

void main() async {
File site = File("uzbekdevs.txt");
print(await site.readAsLines());
}
>> [Salom, Dart!, Flutter]

Bu holatda har bir qatordagi ma’lumot ustida turli vazifalarni bajarishimiz ham mumkin.

Bir qatorli satr sifatida o’qish uchun readAsString() funksiyasini ishlatamiz:

import 'dart:io';

void main() async {
File fayl = File("meningfaylim.txt");
String matn = await fayl.readAsString();
print(matn);
}
>> Salom, Dart! >> Flutter