CodeGym /Kurslar /JAVA 25 SELF /Fayllar və şəkillərlə tanışlıq

Fayllar və şəkillərlə tanışlıq

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

1. Giriş

Proqramlaşdırmada demək olar ki, həmişə fayllarla işləmək lazımdır. Hamıya tanış nümunələr: qeydin mətninin saxlanması, oyunda irəliləyişin yazılması, şəkilin kopyalanması və ya konfiqurasiya faylından parametrlərin oxunması.

Java-da bunun üçün müasir və rahat alətlər var: PathFiles java.nio.file paketindən. Onlar bir neçə sətir kodla faylı açmağa, məzmununu oxumağa, mətni yazmağa və hətta şəkli kopyalamağa imkan verir.

Fayla yol (Path)

Fayl hər zaman diskin haradasa yerləşir və ona müraciət etmək üçün onun yolunu göstərmək lazımdır. Bunun üçün Java-da Path sinfi var, yeni obyekt yaratmağı isə Path.of() metodu ilə edə bilərsiniz.

Path path = Path.of("hello.txt"); // nisbi yol
Path absPath = Path.of("C:/Users/Me/image.png"); // mütləq yol (Windows)

İzah:

  • Nisbi yol faylı layihənin cari qovluğunda axtarır (məsələn, "hello.txt").
  • Mütləq yol tam ünvanı göstərir: disk, qovluqlar və fayl adı.

2. Mətn faylları ilə iş

Java baxımından bütün fayllar 2 tipə bölünür — mətn və binar. Məzmunu insan üçün anlaşılan mətn kimi təqdim etmək mümkündürsə — bu, mətn faylıdır. Qalan hallarda — bu sadəcə bayt toplusudur (binar fayl).

Mətni fayla yazmaq — writeString

Sətiri fayla yazmaq üçün writeString metodundan istifadə edirik.

Path p = Path.of("hello.txt");
Files.writeString(p, "Salam, fayl!");

Burada nə baş verdi:

  1. Path obyektini yaradırıq, o isə "hello.txt"-ni göstərir;
  2. writeString metodu ilə ora sətir yazırıq;
  3. əgər fayl yox idisə, o avtomatik yaradılacaq.

Bu yolla qeydləri və ya mesajları asanlıqla mətn faylına saxlamaq olar.

Fayldan mətn oxumaq — readString

readString metodu bütün faylı dərhal sətirə yükləməyə imkan verir.

Path p = Path.of("hello.txt");
String content = Files.readString(p);
System.out.println(content);

Artıq content dəyişənində faylın məzmunu saxlanılır. Bu, kiçik fayllar üçün əlverişlidir: konfiq faylları, mətnlər, JSON sənədləri.

3. Binar fayllarla iş

Bütün fayllar mətn deyil. Şəkillər, musiqi, arxivlər — bunlar bayt toplularıdır. Onlarla işləmək üçün writereadAllBytes metodları var.

Baytları fayla yazmaq — write

write() metodu fayla bayt massivini yazmağa imkan verir. Buna bəzən bufer (byte buffer) də deyilir.

byte[] data = {65, 66, 67, 68}; // A B C D simvolları
Files.write(Path.of("letters.bin"), data);

Burada fayla bayt massivi yazdıq. Faylı mətn kimi açsanız, içində "ABCD" hərfləri olacaq.

Baytları oxumaq — readAllBytes

Faylın məzmununu geri bayt massivi kimi almaq üçün readAllBytes metodundan istifadə edirik.

byte[] buffer = Files.readAllBytes(Path.of("letters.bin"));

// oxunan bayt massivini ekrana çap edirik
for (byte b : buffer) 
{
    System.out.print((char)b + " ");
}

Ekranda belə görünəcək:

A B C D

Bu üsul istənilən binar fayllarla — şəkillərlə, sənədlərlə, musiqi ilə işləmək üçün istifadə olunur.

4. Fayllarla işin populyar ssenariləri

Fayllarla işin ən populyar ssenarilərindən biri yəqin ki, faylın kopyalanmasıdır.

Faylların kopyalanması

Faylı kopyalamaq üçün onu sadəcə bayt massivinə oxuyub başqa fayla yazmaq olar.

Path in = Path.of("logo.png");
Path out = Path.of("logo_copy.png");

byte[] bytes = Files.readAllBytes(in);
Files.write(out, bytes);

Beləliklə, formatları barədə düşünmədən təsvirləri, sənədləri və digər faylları kopyalaya bilərsiniz.

Mövcudluq və ölçünün yoxlanması

Bəzən faylın mövcud olduğuna əmin olmaq və onun ölçüsünü öyrənmək lazımdır. Bunun üçün existssize metodları var.

Path p = Path.of("hello.txt");
if (Files.exists(p)) 
{
    long size = Files.size(p);
    System.out.println("Fayl tapıldı, ölçü: " + size + " bayt");
} 
else 
{
    System.out.println("Fayl tapılmadı!");
}

Bu, diaqnostika üçün faydalıdır: doğru faylla işləyib-işləmədiyinizi dəqiq biləcəksiniz.

5. İstisnalar

Fayllarla iş xəta ilə nəticələnə bilər: fayl yoxdur, giriş hüquqları çatmır, disk doludur və ya fayl başqa proqram tərəfindən istifadə olunur. Buna görə disk əməliyyatlarını try-catch ilə bürümək, yaxud istisnaları throws vasitəsilə kənara ötürmək lazımdır.

try 
{
    String content = Files.readString(Path.of("hello.txt"));
    System.out.println(content);
} 
catch (IOException e) 
{
    System.out.println("Oxu zamanı xəta: " + e.getMessage());
}

Beləliklə, proqram “çökməyəcək”, əksinə baş verənləri istifadəçiyə səliqəli şəkildə bildirəcək. Lazım gələrsə, IOException istisnasını throws açar sözündən istifadə edən metod vasitəsilə stek boyunca daha yuxarı ötürmək olar.

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