CodeGym /Kurslar /Java SELF AZ /Fayllarla iş Java

Fayllarla iş Java

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Sinif Files

Files sinifi

Fayllarla işləmək üçün əla bir utilitar sinif var — java.nio.file.Files. Bu sinifdə hər vəziyyət üçün metodlar mövcuddur. Bu sinifin bütün metodları statikdir və Path tipli obyektlərlə işləyir. Metodlar çoxdur, ona görə də biz yalnız əsaslarını nəzərdən keçirəcəyik:

Metod Təsviri
Path createFile(Path path)
Yeni fayl yaradır path ilə
Path createDirectory(Path path)
Yeni direktoriyanı yaradır
Path createDirectories(Path path)
Birkaç direktoriyanı yaradır
Path createTempFile(prefix, suffix)
Müvəqqəti fayl yaradır
Path createTempDirectory(prefix)
Müvəqqəti direktoriya yaradır
void delete(Path path)
Faylı və ya boş direktorianı silir
Path copy(Path src, Path dest)
Faylı kopyalayır
Path move(Path src, Path dest)
Faylı hərəkət etdirir
boolean isDirectory(Path path)
Path-nin direktoriyanın olub-olmadığını yoxlayır
boolean isRegularFile(Path path)
Path-nin fayl olub-olmadığını yoxlayır
boolean exists(Path path)
Verilən path-ə uyğun obyektin mövcud olub-olmadığını yoxlayır
long size(Path path)
Faylın ölçüsünü geri qaytarır
byte[] readAllBytes(Path path)
Faylın bütün məzmununu byte massivi kimi geri qaytarır
String readString(Path path)
Faylın bütün məzmununu string kimi geri qaytarır
List<String> readAllLines(Path path)
Faylın bütün məzmununu string siyahısı kimi geri qaytarır
Path write(Path path, byte[])
Fayla byte massivini yazır
Path writeString(Path path, String str)
Fayla string yazır
DirectoryStream<Path> newDirectoryStream(Path dir)
Göstərilən direktoriyadan faylların (və alt direktoriyaların) kolleksiyasını geri qaytarır

2. Faylların və direktoriyaların yaradılması

Faylları və direktoriyaları yaratmaq çox asandır. Gəlin nümunələrə baxaq:

Kod Qeyd
Files.createFile(Path.of("c:\\readme.txt"));
Fayl yaradır
Files.createDirectory(Path.of("c:\\test"));
Direktoriya yaradır
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Direktoriya və lazım olan bütün alt direktoriyaları yaradır, əgər onlar mövcud deyilsə.

3. Faylların kopyalanması, hərəkəti və silinməsi

Faylları kopyalamaq, hərəkət etdirmək və silmək də asandır. Bu, qovluqlara da aiddir, amma qovluqlar boş olmalıdır.

Kod Qeyd
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Faylı kopyalayır
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Faylı hərəkət etdirir və yenidən adlandırır
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Faylı silir

4. Faylın tipi və mövcudluğunu yoxlama

Əgər kənardan əldə etdiyiniz bir yol varsa, bunun fayl, yoxsa direktoriyadır olduğunu bilmək istəyərsiniz. Ümumiyyətlə, bu fayl/direktoriya mövcuddur, ya yox?

Bunun üçün də xüsusi metodlar var. Həmçinin faylın uzunluğunu asanlıqla öyrənmək olar:

Kod Qeyd
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. Fayl məzmunu ilə işləmək

Və nəhayət, faylın məzmununu asanlıqla oxumaq və ya yazmaq üçün bir sıra metodlar var. Məsələn:

Kod Təsvir
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

Fayl məzmununu sətirlər siyahısı şəklində oxuyuruq.

Sətirləri ekrana çıxarırıq.


6. Qovluğun məzmununu əldə etmək

Ən maraqlı metod qalıb — verilmiş qovluqdakı faylları və alt qovluqları əldə etmək.

Bunun üçün xüsusi metod var — newDirectoryStream(), bu metod DirectoryStream<Path> tipindən xüsusi bir obyekt qaytarır. Bunun iterator-u (!) var və bu iterator vasitəsilə verilmiş qovluğun bütün fayllarını və alt qovluqlarını əldə etmək olar.

Bu metod çox sadə görünür:

Kod Təsvir
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


Faylların siyahısı ilə obyekt əldə edirik
Fayllar siyahısı üzrə dövr

DirectoryStream<Path> obyektinin iki xüsusiyyəti var. Əvvəla, onun iterator-u var ki, bu iterator fayllara olan yolları qaytarır və bu obyekti for-each dövründə istifadə edə bilərik.

İkincisi, bu obyekt məlumat axını (stream) rolunu oynayır, və onu close() metodu ilə bağlamaq lazımdır, ya da try-with-resources daxilində istifadə etmək lazımdır.



7. Files.newInputStream metodu

Java 5-dən başlayaraq FileInputStreamFileOutputStream sinifləri köhnəlmiş hesab olunur. Bu siniflərin mənfi cəhətlərindən biri onların obyektləri yaradılan kimi disklərdə faylların yaradılmasıdır. Bu da faylların yaradılması ilə bağlı olan bütün səhvlərin atılmasına səbəb olur.

Sonda bu həll ən yaxşı qərar hesab olunmadı. Buna görə də, fayl obyektləri yaratmaq üçün utilitar sinfin metodlarından - java.nio.Files istifadə edilməsi tövsiyə olunur.

Faylların yaradılması üçün köhnə yanaşma ilə yeni yanaşmanın müqayisəsi:

Əvvəl
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream( src );
İndi
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of( src ) );

FileOutputStream üçün də bənzər dəyişikliklər edilə bilər:

Əvvəl
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
İndi
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );

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