Path: تمثيل مواقع الملفات
أنشئ كائنات Path، وحلّ المسارات وحوّلها إلى مسارات نسبية، وعالج مكوّنات المسار
Path: تمثيل مواقع الملفات درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
مقدمة إلى Path
تمثل الواجهة java.nio.file.Path موقع ملف أو دليل في نظام الملفات. وهي تستبدل الفئة القديمة java.io.File بواجهة برمجية أغنى ومستقلة عن المنصة.
import java.nio.file.*;
Path p1 = Path.of("/home/user/documents/report.txt");
Path p2 = Paths.get("/home", "user", "documents", "report.txt");
System.out.println(p1); // /home/user/documents/report.txt
System.out.println(p1.equals(p2)); // trueمكوّنات Path
استخرج مكوّنات المسار:
Path path = Path.of("/home/user/docs/report.txt");
System.out.println(path.getFileName()); // report.txt
System.out.println(path.getParent()); // /home/user/docs
System.out.println(path.getRoot()); // /
System.out.println(path.getNameCount()); // 4
System.out.println(path.getName(0)); // home
System.out.println(path.getName(3)); // report.txtالمسارات النسبية مقابل المطلقة
يمكن أن يكون المسار مطلقًا (يبدأ من الجذر) أو نسبيًا (يبدأ من الدليل الحالي). استخدم isAbsolute() للتحقق، وtoAbsolutePath() لحل مسار نسبي بالاستناد إلى دليل العمل الحالي.
Path rel = Path.of("docs/report.txt");
Path abs = Path.of("/home/user/docs/report.txt");
System.out.println(rel.isAbsolute()); // false
System.out.println(abs.isAbsolute()); // true
Path resolved = rel.toAbsolutePath(); // resolves against CWD
System.out.println(resolved);resolve: دمج المسارات
تُلحق resolve(other) مسارًا آخر. وإذا كان other مطلقًا، فإنه يستبدل المسار الحالي بالكامل.
Path base = Path.of("/home/user");
Path docs = base.resolve("documents");
Path file = docs.resolve("report.txt");
System.out.println(file); // /home/user/documents/report.txt
// Resolving an absolute path replaces:
Path abs = base.resolve(Path.of("/etc/config"));
System.out.println(abs); // /etc/configrelativize: حساب المسارات النسبية
تحسب relativize(other) المسار النسبي من هذا المسار إلى other:
Path from = Path.of("/home/user");
Path to = Path.of("/home/user/docs/report.txt");
Path rel = from.relativize(to);
System.out.println(rel); // docs/report.txt
// Verify:
System.out.println(from.resolve(rel)); // /home/user/docs/report.txtnormalize: إزالة العناصر الزائدة
تزيل normalize() مقطعي . و.. من المسار:
Path messy = Path.of("/home/user/../user/./docs/./report.txt");
Path clean = messy.normalize();
System.out.println(clean); // /home/user/docs/report.txtstartsWith و endsWith
تحقق من علاقات البادئة واللاحقة بين المسارات:
Path p = Path.of("/home/user/docs/report.txt");
System.out.println(p.startsWith("/home/user")); // true
System.out.println(p.startsWith("/home/other")); // false
System.out.println(p.endsWith("report.txt")); // true
System.out.println(p.endsWith("docs/report.txt")); // trueالتحويل إلى File وURI
حوّل Path إلى الفئة القديمة File أو إلى URI عند الحاجة:
Path path = Path.of("/home/user/report.txt");
java.io.File file = path.toFile();
System.out.println(file.exists()); // depends on filesystem
java.net.URI uri = path.toUri();
System.out.println(uri); // file:///home/user/report.txtPath على منصات مختلفة
يستخدم Path.of() فاصل المنصة. ففي Windows تستخدم المسارات الشرطة المائلة العكسية، وفي Unix تستخدم الشرطة المائلة الأمامية. وتتولى الواجهة البرمجية التعامل مع ذلك بشفافية.
// Portable path construction (works on all platforms):
Path config = Path.of("config", "app", "settings.json");
// On Unix: config/app/settings.json
// On Windows: config\app\settings.json
System.out.println(config);التكرار على عناصر Path
استخدم حلقة for-each أو iterator() للتكرار على عناصر الاسم الفردية:
Path path = Path.of("/home/user/docs/report.txt");
for (Path element : path) {
System.out.println(element); // home, user, docs, report.txt
}
// Note: root ("/") is not included in iterationsubpath: استخراج جزء من المسار
تعيد subpath(begin, end) مسارًا نسبيًا لنطاق من عناصر الاسم:
Path p = Path.of("/home/user/docs/report.txt");
// Indices: home=0, user=1, docs=2, report.txt=3
System.out.println(p.subpath(1, 3)); // user/docs
System.out.println(p.subpath(0, 2)); // home/userتحقق سريع
بالنظر إلى Path.of("/home/user").resolve("docs/file.txt")، ما النتيجة؟
مراجعة: واجهة Path البرمجية
أهم النقاط:
- تنشئ Path.of() / Paths.get() مثيلات Path
- تُستخدم getFileName وgetParent وgetRoot وgetName وgetNameCount للتعامل مع المكوّنات
- تُلحق resolve() مسارًا؛ وتحسب relativize() مسارًا نسبيًا؛ وتنظّف normalize() ./ و../
- تُستخدم startsWith/endsWith للتحقق من البادئة واللاحقة
- مستقلة عن المنصة — إذ يُتعامل مع الفاصل تلقائيًا
الأسئلة الشائعة
هل درس «Path: تمثيل مواقع الملفات» مجاني؟
نعم — نص درس «Path: تمثيل مواقع الملفات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «Path: تمثيل مواقع الملفات»؟
أنشئ كائنات Path، وحلّ المسارات وحوّلها إلى مسارات نسبية، وعالج مكوّنات المسار تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «Path: تمثيل مواقع الملفات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Path: تمثيل مواقع الملفات
- أداة Files: القراءة والكتابة والنسخ والنقل
- استعراض أشجار المجلدات باستخدام Files.walk
- WatchService: مراقبة تغييرات الملفات