CodeGym /Kurslar /JAVA 25 SELF /File, Path, Files sinifləri: fayllar haqqında məlumat əld...

File, Path, Files sinifləri: fayllar haqqında məlumat əldə etmə

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

1. Təkrar: File vs Path vs Files

Köhnə, yaxşı File

Bəli... Java layihələrində legacy-kod kifayət qədərdir. Ona görə gəlin Java-nın veteranı, File sinfini bir daha yada salaq. O, dilin ilk versiyasında peyda olub və fayl və qovluqlarla işləməyə imkan verir: faylın mövcud olub-olmadığını, adını, ölçüsünü, dəyişdirilmə tarixini öyrənmək, fayl və qovluqları yaratmaq və silmək. Artıq bildiyimiz kimi, onun bir sıra çatışmazlıqları var: bəzi metodlar qeyri-intuitiv işləyir, bütün əməliyyatlar platformalararası dəstəklənmir və bəziləri istisna atmaq əvəzinə sadəcə false qaytarır (bu da hər zaman sazlama üçün rahat deyil).

import java.io.File;

File file = new File("example.txt");
System.out.println("Fayl mövcuddurmu? " + file.exists());
System.out.println("Bu fayldırmı? " + file.isFile());
System.out.println("Bu qovluqdurmu? " + file.isDirectory());

Path və Files: müasir yanaşma (Java 7+)

Java 7 ilə java.nio.file paketi yarandı və daha güclü, çevik alətlər təklif etdi. İki əsas qəhrəman:

  • Path — fayl və ya qovluğa gedən yolu təsvir edən interfeys. Buna «ağıllı sətir» də demək olar: yolları parçalamağı, birləşdirməyi, təhlil etməyi, müqayisə etməyi bacarır.
  • Files — fayl və qovluqlarla işləmək üçün çoxlu statik metodları olan utilitar sinif: yaratma, silmə, kopyalama, oxuma, yazma, məlumat əldə etmə.
import java.nio.file.Path;
import java.nio.file.Paths;

Path path = Paths.get("example.txt");
System.out.println("Yol: " + path);

Maraqlı fakt: Path sinfi sadəcə sətir deyil! O, qovluq ayırıcılardan xəbərdardır, nisbi və mütləq yolları anlamağı bacarır və Windows ilə Linux-da eyni dərəcədə yaxşı işləyir.

File və Path/Files müqayisə cədvəli

Meyar File (köhnə API) Path + Files (müasir API)
Sintaksis OOP üslubu Path + Files-in statik metodlarının kombinasiyası
Platformalararası uyğunluq Qismən Əla, ƏS-i nəzərə alır
İstisnalar Həmişə deyil Demək olar ki, həmişə
Yeni imkanlar Yoxdur Bəli (atributlar, icazələr, istinadlar və s.)
Tövsiyə olunur Daha çox yox Bəli

2. Fayl/qovluq haqqında məlumat əldə etmə

Gəlin, fayl və ya qovluq barədə ən vacib məlumatları necə öyrənəcəyimizi anlayaq: obyektin mövcudluğu, tipi (fayl və ya qovluq), ölçüsü, adı, yolu və valideyn qovluğu.

Mövcudluğun yoxlanması

File vasitəsilə

File file = new File("example.txt");
if (file.exists()) {
    System.out.println("Fayl mövcuddur!");
} else {
    System.out.println("Fayl tapılmadı.");
}

PathFiles vasitəsilə

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

Path path = Paths.get("example.txt");
if (Files.exists(path)) {
    System.out.println("Fayl mövcuddur!");
} else {
    System.out.println("Fayl tapılmadı.");
}

Məsləhət: Yeni layihələr üçün həmişə PathFiles istifadə edin. Bu, daha təhlükəsiz, rahat və platformalararasıdır.

Tipin yoxlanması: fayl, yoxsa qovluq

File

if (file.isFile()) {
    System.out.println("Bu fayldır.");
} else if (file.isDirectory()) {
    System.out.println("Bu qovluqdur.");
}

Path + Files

if (Files.isRegularFile(path)) {
    System.out.println("Bu fayldır.");
} else if (Files.isDirectory(path)) {
    System.out.println("Bu qovluqdur.");
}

Fayl ölçüsünün əldə edilməsi

File

long size = file.length();
System.out.println("Faylın ölçüsü: " + size + " bayt");

Path + Files

try {
    long size = Files.size(path);
    System.out.println("Faylın ölçüsü: " + size + " bayt");
} catch (IOException e) {
    System.out.println("Fayl ölçüsünü əldə edərkən xəta: " + e.getMessage());
}

Diqqət: Qovluq üçün length() metodu həmişə 0 qaytaracaq, Files.size(path) isə IOException atacaq. Qovluğun ölçüsü — içindəki bütün faylların ölçülərinin cəmidir (ətraflı — növbəti mühazirələrdə).

Mütləq və nisbi yolun əldə edilməsi

File

System.out.println("Nisbi yol: " + file.getPath());
System.out.println("Mütləq yol: " + file.getAbsolutePath());

Path

System.out.println("Nisbi yol: " + path);
System.out.println("Mütləq yol: " + path.toAbsolutePath());

Fayl adının və valideyn qovluğun əldə edilməsi

File

System.out.println("Fayl adı: " + file.getName());
System.out.println("Valideyn qovluq: " + file.getParent());

Path

System.out.println("Fayl adı: " + path.getFileName());
System.out.println("Valideyn qovluq: " + path.getParent());

Lifehack: Path təkcə fayllarla deyil, həm də qovluqlarla, nisbi və mütləq yollarla işləyir və yolu asanlıqla hissələrə ayıra bilir.

3. Fayl atributlarının əldə edilməsi

Bəzən faylın ölçüsü və adından əlavə daha maraqlı məlumatlar da lazımdır: yaradılma tarixi, son dəyişdirilmə tarixi, giriş icazələri.

Yaradılma və son dəyişdirilmə tarixi

File (məhdud)

long lastModified = file.lastModified();
System.out.println("Son dəyişdirilmə tarixi: " + new java.util.Date(lastModified));

Minus: File vasitəsilə faylın yaradılma tarixini öyrənmək mümkün deyil!

Path + Files

import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;

try {
    BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
    FileTime creationTime = attrs.creationTime();
    FileTime lastModifiedTime = attrs.lastModifiedTime();

    System.out.println("Yaradılma tarixi: " + creationTime);
    System.out.println("Son dəyişdirilmə tarixi: " + lastModifiedTime);
} catch (IOException e) {
    System.out.println("Atributları əldə edərkən xəta: " + e.getMessage());
}

Giriş icazələrinin yoxlanması

File

System.out.println("Oxumaq mümkündür? " + file.canRead());
System.out.println("Yazmaq mümkündür? " + file.canWrite());
System.out.println("İcra etmək mümkündür? " + file.canExecute());

Path + Files

System.out.println("Oxumaq mümkündür? " + Files.isReadable(path));
System.out.println("Yazmaq mümkündür? " + Files.isWritable(path));
System.out.println("İcra etmək mümkündür? " + Files.isExecutable(path));

Maraqlı fakt: Windows-da giriş icazələri məhduddur, Unix sistemlərində isə (məsələn, POSIX atributları vasitəsilə) daha çox icazəni almaq və dəyişmək mümkündür.

4. Fayllar haqqında məlumat alarkən tipik səhvlər

Səhv №1: Path lazım olduğu halda File istifadə etmək.
Bir çox yeni başlayanlar bunu daha asan olduğu üçün və ya «internetdə hər yerdə belədir» deyə hələ də File istifadə edirlər. Lakin PathFiles vasitəsilə eyni işləri daha etibarlı və müasir şəkildə görmək olar.

Səhv №2: Obyektin tipini yalnız File ilə yoxlamaq.
Yalnız file.isFile()file.isDirectory() istifadə edirsinizsə, «xüsusi» faylları (simvolik linklər, cihazlar) gözdən qaçıra bilərsiniz. Müasir API-də Files.isRegularFile(path), Files.isDirectory(path) və digər yoxlamalar var.

Səhv №3: İstisnaları görməməzlikdən gəlmək.
Files.size(path)Files.readAttributes(...) metodları IOException atır. İstisnaları emal etməsəniz, proqram ilk giriş xətasında və ya fayl iş zamanı yoxa çıxanda dərhal çökəcək.

Səhv №4: Qovluğun ölçüsünü birbaşa öyrənmək mümkün olduğunu güman etmək.
Files.size(path) metodu qovluq üçün istisna atacaq. Qovluğun ölçüsünü öyrənmək üçün içəridəki bütün faylların ölçülərini rekursiv toplamaq lazımdır.

Səhv №5: Giriş icazələrinin kifayət qədər yoxlanmaması.
Fayl mövcud olsa belə, onu oxumaq və ya yazmaq üçün icazələriniz olmaya bilər. Əməliyyatlardan əvvəl icazələri həmişə yoxlayın: Files.isReadable(path), Files.isWritable(path), Files.isExecutable(path).

1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Fayl sistemi detektivi: bu yol nədir?
Fayl sistemi detektivi: bu yol nədir?
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Rəqəmsal detektiv: fayl dosyesi
Rəqəmsal detektiv: fayl dosyesi
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION