CodeGym /Kurslar /JAVA 25 SELF /File, Path, Files sinifləri: icmal, obyektlərin yaradılma...

File, Path, Files sinifləri: icmal, obyektlərin yaradılması

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. File sinfi: hər şey necə başladı

Yeni layihələrdə File sinfini istifadə etməməyin daha yaxşı olduğunu artıq müəyyən etsək də, hələ də ondan istifadə olunan çoxlu legacy‑sistemlər var. Buna görə onu anlamaq və onunla işləməyi bacarmaq vacibdir. File sinfi diskte faylı və ya direktoriyanı təqdim etməyin köhnə yoludur. Amma çaşdırmayın: File obyekti faylın özü deyil, sadəcə «göstərici»/yol pasportudur. Məsələn, ifadə File f = new File("hello.txt"); diskdə fayl yaratmır — siz sadəcə yolu təsvir etdiniz.

File obyektini necə yaratmalı?

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        File file = new File("example.txt"); // nisbi yol
        File folder = new File("mydir");     // direktoriya

        System.out.println("Mütləq yol: " + file.getAbsolutePath());
        System.out.println("Fayl mövcuddurmu? " + file.exists());
        System.out.println("Bu fayldır? " + file.isFile());
        System.out.println("Bu direktoriyadır? " + folder.isDirectory());
    }
}

Vacib məqamlar:
File obyektinin yaradılması diskdə fayl yaratmır. Bu sadəcə «qısayol»dur. Faylın həqiqətən yaranması üçün yaradılmanı açıq şəkildə başladmaq lazımdır (məsələn, məlumat yazmaq və ya file.createNewFile() çağırmaq).

File sinfinin əsas metodları

  • exists() — faylın/direktoriyanın mövcud olub‑olmadığını yoxlayır.
  • isFile() — bu fayldır (qovluq deyil)?
  • isDirectory() — bu direktoriyadır?
  • getAbsolutePath() — mütləq yolu əldə etmək.
  • length() — faylın ölçüsü, baytla.
  • getName() — faylın və ya qovluğun adı.
  • delete() — fayl/direktoriyanı silmək (boşdursa).

Nümunə: fayl haqqında məlumatı çıxarırıq

File file = new File("example.txt");
System.out.println("Ad: " + file.getName());
System.out.println("Yol: " + file.getAbsolutePath());
System.out.println("Ölçü: " + file.length() + " bayt");
System.out.println("Mövcuddur? " + file.exists());

2. Path sinfi: fayllara müasir baxış

Path — yeni fayl API-sinin (NIO.2, Java 7‑dən) bir hissəsidir. Bu, fayla/direktoriyaya aparan yolun abstraksiyasıdır; yol təkcə yerli diskdə deyil, məsələn, ZIP arxivinin içində və ya uzaq resursda da ola bilər (uyğun provayder olduqda).

Əgər File köhnə kağız xəritədirsə, Path — GPS‑naviqatordur.

Path obyektini necə yaratmalı?

import java.nio.file.Path;
import java.nio.file.Paths;

public class PathDemo {
    public static void main(String[] args) {
        Path path1 = Paths.get("example.txt"); // nisbi yol
        Path path2 = Paths.get("folder", "file.txt"); // yol hissələrini birləşdiririk

        System.out.println("Yol 1: " + path1.toAbsolutePath());
        System.out.println("Yol 2: " + path2.toAbsolutePath());
    }
}

Üstünlük: ayırıcılara görə düşünməyə ehtiyac yoxdur. Paths.get sizin ƏS üçün düzgün formatı seçəcək.

FilePath arasında çevirmə

  • FilePath: file.toPath()
  • PathFile: path.toFile()
File file = new File("test.txt");
Path path = file.toPath();

Path anotherPath = Paths.get("data.txt");
File anotherFile = anotherPath.toFile();

Yollarla iş: resolve, relativize, normalize

Yolların birləşdirilməsi (resolve)

Path dir = Paths.get("myfolder");
Path file = dir.resolve("notes.txt"); // myfolder/notes.txt
System.out.println(file); // myfolder/notes.txt

Nisbi yol (relativize)

Path pathA = Paths.get("folderA/file1.txt");
Path pathB = Paths.get("folderA/subfolder/file2.txt");
Path relative = pathA.relativize(pathB);
System.out.println(relative); // ../subfolder/file2.txt

Yolun normallaşdırılması (normalize)

Path messy = Paths.get("folder/../folder/file.txt");
Path clean = messy.normalize();
System.out.println(clean); // folder/file.txt

Nümunə: fayla yol qururuq

Path home = Paths.get(System.getProperty("user.home"));
Path docs = home.resolve("Documents");
Path myFile = docs.resolve("myfile.txt");
System.out.println("Fayla yol: " + myFile.toAbsolutePath());

3. Files sinfi: sizin İsveçrə bıçağınız

java.nio.file paketindən Files sinfi Path üzərində fayl və direktoriyalarla işləmək üçün statik metodlardan ibarət utilit dəstidir. O, demək olar ki, hər şeyi bacarır: mövcudluğu yoxlamaq, yaratmaq/silmək, oxumaq/yazmaq, kopyalamaq/daşımaq, atributları əldə etmək və qovluq ağacını gəzib keçmək.

Files sinfinin əsas metodları

  • Files.exists(path) — faylın/direktoriyanın mövcudluğunu yoxlayır.
  • Files.isDirectory(path) — bu direktoriyadır?
  • Files.size(path) — faylın ölçüsü.
  • Files.createFile(path) — fayl yaratmaq.
  • Files.createDirectory(path) — direktoriya yaratmaq.
  • Files.delete(path) — faylı/direktoriyanı silmək.
  • Files.copy(src, dest) — faylı kopyalamaq.
  • Files.move(src, dest) — daşımaq/adını dəyişmək.
  • Files.getLastModifiedTime(path) — son dəyişiklik vaxtı.
  • Files.readAllBytes(path) — bütün faylı bayt massivinə oxumaq.
  • Files.readAllLines(path) — mətn faylının bütün sətirlərini oxumaq.
  • Files.write(path, bytes) — baytları fayla yazmaq.

Nümunə: faylı yoxlayırıq

import java.nio.file.*;

public class FilesDemo {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");

        System.out.println("Fayl mövcuddur? " + Files.exists(path));
        System.out.println("Bu direktoriyadır? " + Files.isDirectory(path));

        if (Files.exists(path)) {
            try {
                System.out.println("Faylın ölçüsü: " + Files.size(path) + " bayt");
            } catch (Exception e) {
                System.out.println("Ölçünü alarkən xəta: " + e.getMessage());
            }
        }
    }
}

4. Təcrübə: obyektlər yaradırıq, xassələri göstəririk

Fayl və direktoriya üçün obyektlər yaradırıq

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CompareDemo {
    public static void main(String[] args) {
        // Köhnə üsul
        File oldFile = new File("test.txt");
        File oldDir = new File("mydir");

        // Yeni üsul
        Path newFile = Paths.get("test.txt");
        Path newDir = Paths.get("mydir");

        System.out.println("=== File API ===");
        System.out.println("Fayl: " + oldFile.getAbsolutePath());
        System.out.println("Mövcuddur? " + oldFile.exists());
        System.out.println("Bu fayldır? " + oldFile.isFile());
        System.out.println("Bu direktoriyadır? " + oldDir.isDirectory());

        System.out.println("\n=== Path API ===");
        System.out.println("Fayl: " + newFile.toAbsolutePath());
        System.out.println("Mövcuddur? " + java.nio.file.Files.exists(newFile));
        System.out.println("Bu fayldır? " + java.nio.file.Files.isRegularFile(newFile));
        System.out.println("Bu direktoriyadır? " + java.nio.file.Files.isDirectory(newDir));
    }
}

Faylın xassələrini göstəririk

import java.nio.file.*;

public class FileProperties {
    public static void main(String[] args) {
        Path path = Paths.get("test.txt");

        System.out.println("Mütləq yol: " + path.toAbsolutePath());
        System.out.println("Faylın adı: " + path.getFileName());
        System.out.println("Valideyn qovluq: " + path.getParent());

        if (Files.exists(path)) {
            try {
                System.out.println("Ölçü: " + Files.size(path) + " bayt");
                System.out.println("Son dəyişiklik: " + Files.getLastModifiedTime(path));
            } catch (Exception e) {
                System.out.println("Məlumatı alarkən xəta: " + e.getMessage());
            }
        } else {
            System.out.println("Fayl tapılmadı.");
        }
    }
}

5. Müqayisə: File vs Path/Files

İmkan File (java.io) Path + Files (java.nio.file)
Yolun təqdimatı Yalnız yerli disk Yerli disk, ZIP, şəbəkə resursları
Yolların birləşdirilməsi Slaşlar vasitəsilə əl ilə birləşdirmə Rahat şəkildə resolve ilə
Mövcudluğun yoxlanması exists() Files.exists(path)
Məzmunu oxuma/yazma Xeyr Bəli (Files.readAll..., Files.write)
Atributların əldə edilməsi Baza (length(), lastModified()) Genişləndirilmiş atributlar və təqdimatlar
Uyğunluq Java-nın bütün versiyaları ilə Java 7 və yuxarı
Simvolik keçidlərlə iş Məhdud Tam dəstək

Qısa olaraq: nə zaman nəyi istifadə etməli?

  • Yeni layihələr üçün — PathFiles istifadə edin.
  • Köhnə kodu dəstəkləmək üçün — bəzən File ilə işləməli olacaqsınız.

6. Faydalı nüanslar

Nisbi və mütləq yollar

Nisbi yol — cari işçi direktoriyaya görə olan yoldur; mütləq yol — fayl sisteminin kökündən başlayan tam yoldur.

Path relative = Paths.get("data", "file.txt");
Path absolute = relative.toAbsolutePath();
System.out.println("Mütləq yol: " + absolute);

Çarpaz platforma uyğunluğu

PathFiles ƏS xüsusiyyətlərini nəzərə alır (ayırıcilar, kodlaşdırmalar və s.). Yolları əl ilə "C:\\folder\\file.txt" kimi yazmayın — Paths.getresolve istifadə edin.

FilePath arasında çevirmə

Əgər sizdə File üzərində köhnə kod varsa, asanlıqla yeni API‑yə keçmək olar:

File legacy = new File("legacy.txt");
Path modern = legacy.toPath();
if (Files.exists(modern)) {
    // İndi NIO.2-nin bütün imkanlarından istifadə etmək olar
}

Faylın mövcudluğunu yoxlamaq

Path path = Paths.get("notes.txt");
if (Files.exists(path)) {
    System.out.println("Fayl tapıldı!");
} else {
    System.out.println("Fayl mövcud deyil.");
}

7. Mini‑praktika: fayl və direktoriyanı yaradır və yoxlayırıq

import java.nio.file.*;

public class MiniPractice {
    public static void main(String[] args) throws Exception {
        Path dir = Paths.get("demo_dir");
        Path file = dir.resolve("hello.txt");

        // Direktoriyanı, əgər yoxdursa, yaradırıq
        if (!Files.exists(dir)) {
            Files.createDirectory(dir);
            System.out.println("Direktoriya yaradıldı: " + dir.toAbsolutePath());
        }

        // Faylı, əgər yoxdursa, yaradırıq
        if (!Files.exists(file)) {
            Files.createFile(file);
            System.out.println("Fayl yaradıldı: " + file.toAbsolutePath());
        }

        // Xüsusiyyətləri göstəririk
        System.out.println("Fayl mövcuddur? " + Files.exists(file));
        System.out.println("Bu fayldır? " + Files.isRegularFile(file));
        System.out.println("Ölçü: " + Files.size(file) + " bayt");

        // Faylı və direktoriyanı silirik (istəyə görə)
        Files.delete(file);
        Files.delete(dir);
        System.out.println("Fayl və direktoriya silindi.");
    }
}

8. File/Path/Files ilə işləyərkən tipik səhvlər

Xəta №1: File ilə Path arasında qarışıqlıq. Bir çox yeni başlayanlar Files metodlarını File obyekti ilə istifadə etməyə çalışır. Unutmayın: Files.* Path ilə işləyir. Əgər sizin File‑nız varsa, əvvəlcə file.toPath() edin.

Xəta №2: File və ya Path obyektinin yaradılmasının faylı da yaradacağını gözləmək. Yol obyekti — qısayoldur, real fayl deyil. Yaratmaq üçün Files.createFile(path) və ya məlumat yazmağından istifadə edin.

Xəta №3: Yolları sətirlə əl ilə yığmaq. "folder/file.txt" və ya "folder\\file.txt" yazmayın. Paths.get(...) və resolve(...) istifadə edin. Bu, daha təhlükəsizdir və çarpaz platformadır.

Xəta №4: İstisnaların görməzlikdən gəlməsi. Fayllarla əməliyyatlar IOException və digər istisnalar ata bilər. Onları try-catch vasitəsilə emal edin və ya yuxarıya ötürün (throws).

Xəta №5: File.exists() ilə yoxlama, sonra Path ilə işləmək. Bir üsluba sadiq qalmağa çalışın: Path ilə başlamısınızsa — Files.exists(path)Files metodlarının qalanını istifadə edin.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION