العمل مع نظام الملفات في Java: من File إلى NIO
العمل مع نظام الملفات هو أحد المهام الأساسية في التطوير بلغة Java. سواء كان ذلك قراءة الإعدادات، أو كتابة السجلات، أو معالجة بيانات المستخدم، فإن القدرة على التفاعل بشكل صحيح مع الملفات والمجلدات ضرورية لكل مطور Java. في هذه المقالة، سنشرح بالتفصيل الفئات والمناهج الرئيسية للعمل مع نظام الملفات، بدءًا من الكلاسيكي java.io.File وانتهاءً بالحديث java.nio.file.
فئة File: أساسيات العمل مع الملفات والمجلدات
فئة java.io.File موجودة في Java منذ الإصدار الأول وتوفر إمكانيات أساسية للعمل مع المسارات والملفات والمجلدات. إنها لا تقرأ أو تكتب البيانات مباشرة، ولكنها تسمح بتنفيذ عمليات إدارة نظام الملفات.
إنشاء كائن File والتحقق من الوجود:
import java.io.File;
public class FileExample { public static void main(String[] args) { File file = new File("example.txt"); File dir = new File("myFolder");
System.out.println("الملف موجود: " + file.exists()); System.out.println("هذا مجلد: " + dir.isDirectory()); }}إنشاء الملفات والمجلدات:
File newFile = new File("newFile.txt");if (newFile.createNewFile()) { System.out.println("تم إنشاء الملف: " + newFile.getName());} else { System.out.println("الملف موجود بالفعل");}
File newDir = new File("newDirectory");if (newDir.mkdir()) { System.out.println("تم إنشاء المجلد");}
// إنشاء مجلدات متداخلةFile nestedDir = new File("parent/child/grandchild");if (nestedDir.mkdirs()) { System.out.println("تم إنشاء المجلدات المتداخلة");}الحصول على معلومات حول الملف:
File infoFile = new File("example.txt");System.out.println("المسار المطلق: " + infoFile.getAbsolutePath());System.out.println("الحجم: " + infoFile.length() + " بايت");System.out.println("آخر تعديل: " + infoFile.lastModified());System.out.println("المجلد الأصلي: " + infoFile.getParent());الحذف وإعادة التسمية:
File fileToDelete = new File("temp.txt");if (fileToDelete.delete()) { System.out.println("تم حذف الملف");}
File oldFile = new File("old.txt");File newFile = new File("new.txt");if (oldFile.renameTo(newFile)) { System.out.println("تم إعادة تسمية الملف");}قراءة وكتابة الملفات: التدفقات الكلاسيكية للإدخال والإخراج
للقراءة والكتابة المباشرة للبيانات، تُستخدم تدفقات الإدخال والإخراج (I/O streams). الفئات الرئيسية: FileInputStream، FileOutputStream للبيانات البايتية و FileReader، FileWriter للبيانات النصية.
كتابة نص إلى ملف باستخدام FileWriter:
import java.io.FileWriter;import java.io.IOException;
public class WriteExample { public static void main(String[] args) { try (FileWriter writer = new FileWriter("output.txt")) { writer.write("مرحباً، أيها العالم!"); writer.write("هذا هو السطر الثاني."); System.out.println("تمت الكتابة بنجاح"); } catch (IOException e) { System.err.println("خطأ في الكتابة: " + e.getMessage()); } }}قراءة نص من ملف باستخدام FileReader و BufferedReader:
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;
public class ReadExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("output.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);