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.