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: Path və Files 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:
- Path obyektini yaradırıq, o isə "hello.txt"-ni göstərir;
- writeString metodu ilə ora sətir yazırıq;
- ə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 write və readAllBytes 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 exists və size 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.
GO TO FULL VERSION