20. File Handling¶
Dasturlar ko‘pincha ma'lumotlarni faqat xotirada saqlab qolmaydi.
Masalan, dastur:
- fayl yaratishi;
- fayldan ma'lumot o‘qishi;
- faylga ma'lumot yozishi;
- faylni o‘chirishi;
- fayl mavjudligini tekshirishi
kerak bo‘lishi mumkin.
Java'da fayllar bilan ishlash uchun java.io va java.nio.file paketlaridan foydalanish mumkin.
Bu bobda avval oddiy va amaliy usullarni o‘rganamiz.
File class¶
Java'da eski va sodda file handling usullaridan biri — File class.
Uni import qilamiz:
import java.io.File;
Keyin:
File file = new File("data.txt");
Bu yerda data.txt fayl obyektini ifodalaydi.
Fayl mavjudligini tekshirish¶
exists() methodi fayl mavjud yoki mavjud emasligini tekshiradi.
import java.io.File;
public class Main {
public static void main(String[] args) {
File file = new File("data.txt");
if (file.exists()) {
System.out.println("Fayl mavjud.");
} else {
System.out.println("Fayl mavjud emas.");
}
}
}
Agar fayl mavjud bo‘lsa:
Fayl mavjud.
chiqadi.
Fayl yaratish¶
Fayl yaratish uchun createNewFile() methodidan foydalanish mumkin.
Bu method exception chiqarishi mumkin, shuning uchun try-catch kerak.
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
File file = new File("data.txt");
if (file.createNewFile()) {
System.out.println("Fayl yaratildi.");
} else {
System.out.println("Fayl allaqachon mavjud.");
}
} catch (IOException e) {
System.out.println("Fayl yaratishda xatolik.");
}
}
}
Fayl nomini olish¶
getName() fayl nomini qaytaradi.
File file = new File("data.txt");
System.out.println(file.getName());
Natija:
data.txt
Fayl joylashuvini olish¶
getAbsolutePath() faylning to‘liq pathini beradi.
File file = new File("data.txt");
System.out.println(file.getAbsolutePath());
Natija kompyuteringizdagi joylashuvga qarab farq qiladi.
Fayl hajmini olish¶
length() fayl hajmini byte ko‘rinishida qaytaradi.
File file = new File("data.txt");
System.out.println(file.length());
Masalan:
128
Bu fayl taxminan 128 byte ekanini bildiradi.
Faylni o‘chirish¶
delete() faylni o‘chiradi.
File file = new File("data.txt");
if (file.delete()) {
System.out.println("Fayl o‘chirildi.");
} else {
System.out.println("Faylni o‘chirib bo‘lmadi.");
}
Faylga yozish¶
Faylga text yozish uchun FileWriter ishlatish mumkin.
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("data.txt");
writer.write("Salom, Java!");
writer.close();
} catch (IOException e) {
System.out.println("Faylga yozishda xatolik.");
}
}
}
Natijada data.txt ichida:
Salom, Java!
bo‘ladi.
close() nima uchun kerak?¶
Fayl bilan ishlash tugagach, uni yopish kerak.
writer.close();
Bu resursni bo‘shatadi.
Lekin zamonaviy Java kodida try-with-resources ishlatish yanada yaxshi.
Try-with-resources¶
Masalan:
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("data.txt")) {
writer.write("Salom, Java!");
} catch (IOException e) {
System.out.println("Xatolik yuz berdi.");
}
}
}
Bu usulda writer.close()ni qo‘lda yozish shart emas.
Java resource'ni avtomatik yopadi.
Faylga bir nechta qator yozish¶
try (FileWriter writer = new FileWriter("data.txt")) {
writer.write("Ali\n");
writer.write("Vali\n");
writer.write("Hasan\n");
} catch (IOException e) {
System.out.println("Xatolik yuz berdi.");
}
Fayl ichida:
Ali
Vali
Hasan
bo‘ladi.
Fayldan o‘qish¶
Fayldan ma'lumot o‘qish uchun Scannerdan foydalanish mumkin.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
File file = new File("data.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("Fayl topilmadi.");
}
}
}
Agar faylda:
Ali
Vali
Hasan
bo‘lsa, dastur ham shu ma'lumotlarni chiqaradi.
Try-with-resources bilan o‘qish¶
Scannerni ham avtomatik yopish mumkin.
try (Scanner scanner = new Scanner(new File("data.txt"))) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
} catch (FileNotFoundException e) {
System.out.println("Fayl topilmadi.");
}
Bu usul tozaroq va xavfsizroq.
Faylga ma'lumot qo‘shish¶
Oddiy FileWriter mavjud faylni qayta yozishi mumkin.
Masalan:
FileWriter writer = new FileWriter("data.txt");
Agar faylda oldindan ma'lumot bo‘lsa, yangi yozuv eski ma'lumotni almashtirishi mumkin.
Mavjud ma'lumot oxiriga qo‘shish uchun true argumentidan foydalanamiz:
FileWriter writer = new FileWriter("data.txt", true);
Masalan:
try (FileWriter writer = new FileWriter("data.txt", true)) {
writer.write("Yangi qator\n");
} catch (IOException e) {
System.out.println("Xatolik yuz berdi.");
}
Bu mavjud fayl oxiriga yangi qator qo‘shadi.
Files va Path¶
Zamonaviy Java dasturlarida java.nio.file API juda ko‘p ishlatiladi.
Masalan:
import java.nio.file.Path;
Path path = Path.of("data.txt");
Bu fayl yo‘lini ifodalaydi.
Fayl mavjudligini:
import java.nio.file.Files;
if (Files.exists(path)) {
System.out.println("Fayl mavjud.");
}
orqali tekshirish mumkin.
Faylga yozish — zamonaviy usul¶
import java.nio.file.Files;
import java.nio.file.Path;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
Path path = Path.of("data.txt");
try {
Files.writeString(path, "Salom, Java!");
} catch (IOException e) {
System.out.println("Faylga yozishda xatolik.");
}
}
}
Fayldan o‘qish — zamonaviy usul¶
import java.nio.file.Files;
import java.nio.file.Path;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
Path path = Path.of("data.txt");
try {
String content = Files.readString(path);
System.out.println(content);
} catch (IOException e) {
System.out.println("Faylni o‘qishda xatolik.");
}
}
}
Bu usul kichik text fayllar bilan ishlashda juda qulay.
Path nima?¶
Path fayl yoki papkaning yo‘lini ifodalaydi.
Masalan:
Path path = Path.of("data.txt");
Yoki:
Path path = Path.of("data", "users.txt");
Bu:
data/users.txt
kabi pathni ifodalashi mumkin.
Fayl va papka¶
Path faqat fayl uchun emas, papka uchun ham ishlatiladi.
Masalan:
Path path = Path.of("documents");
Papka yaratish:
Files.createDirectory(path);
Bunda exception yuz berishi mumkin:
try {
Files.createDirectory(path);
} catch (IOException e) {
System.out.println("Papka yaratilmadi.");
}
Real hayotdagi misol¶
Tasavvur qiling, siz login dasturi yaratyapsiz.
Foydalanuvchi ma'lumotlarini faylga yozishingiz mumkin:
users.txt
Masalan:
Ali
Vali
Hasan
Dastur ishga tushganda fayldan ma'lumotlarni o‘qib oladi.
Yangi foydalanuvchi ro‘yxatdan o‘tganda esa fayl oxiriga yangi ma'lumot qo‘shiladi.
Bu oddiy loyihalarda foydali bo‘lishi mumkin.
Katta loyihalarda esa odatda database ishlatiladi.
Amaliy mashqlar¶
1-mashq¶
data.txt nomli fayl yarating.
Agar fayl mavjud bo‘lmasa, uni Java orqali yarating.
2-mashq¶
Faylga quyidagi ma'lumotlarni yozing:
Ali
Vali
Hasan
Husan
3-mashq¶
Fayldagi barcha qatorlarni o‘qib, console'ga chiqaring.
4-mashq¶
Fayl oxiriga yangi ism qo‘shing.
Masalan:
Akmal
5-mashq¶
Fayl mavjud yoki mavjud emasligini tekshiradigan dastur yozing.
6-mashq¶
Faylni o‘chiradigan dastur yozing.
Muhim narsalarni eslab qoling¶
Java'da file handling uchun java.io va java.nio.file paketlari ishlatiladi.
File fayl bilan ishlash uchun klass.
File file = new File("data.txt");
Fayl mavjudligini tekshirish:
file.exists();
Fayl yaratish:
file.createNewFile();
Faylni o‘chirish:
file.delete();
Faylga yozish:
FileWriter writer = new FileWriter("data.txt");
Fayldan o‘qish:
Scanner scanner = new Scanner(file);
Zamonaviy API:
Path path = Path.of("data.txt");
Yozish:
Files.writeString(path, "Salom");
O‘qish:
String text = Files.readString(path);
File handling real dasturlarda konfiguratsiya, loglar, text fayllar va boshqa ma'lumotlar bilan ishlashda muhim hisoblanadi.