مسیرها در Java
با Paths.get یک Path بسازید تا بدون باز کردن فایل هنوز بتوانید مکان را نام ببرید. Route.java را باز کنید، Paths.get("note.txt") را صدا بزنید و getFileName() را چاپ کنید. با javac Route.java ترجمه کنید و java Route را اجرا کنید. صفحه باید note.txt را نشان دهد. دموی دوم "docs" و "note.txt" را به هم وصل میکند، نام فایل را چاپ میکند، بعد پوشهٔ والد را. دموی سوم کل مسیر پیوستهشده را چاپ میکند. inheritance را برای صفحهٔ بعد بگذارید.
نامگذاری یک قطعهٔ فایل
صفحهٔ نوشتن با FileWriter و رشتهٔ سادهٔ "note.txt" حروف را ذخیره کرد. این صفحه آن نوع نام را به شیء Path تبدیل میکند که میتوانید از آن سؤال بپرسید. فایل تدریس را با نام Route.java باز کنید. نام کلاس عمومی را Route نگه دارید تا با نام فایل یکی باشد. دموهای نوشتن باقیماندهٔ Store، دموهای scanner مربوط به Reader، خطهای throw مربوط به Signal، و هر Scanner صفحهکلید را پاک کنید. برنامه نباید منتظر تایپ بماند. برای این دموها لازم نیست note.txt را روی دیسک بسازید — نامگذاری مسیر همان باز کردن فایل نیست.
نزدیک بالا نگه دارید:
import java.nio.file.Path;
import java.nio.file.Paths;
داخل main مسیر را از یک نام بسازید:
Path p = Paths.get("note.txt");
فقط قطعهٔ آخر را چاپ کنید:
System.out.println(p.getFileName());
getFileName یک Path برمیگرداند که بهصورت note.txt چاپ میشود. شما tea نمینویسید و oak نمیخوانید. شما نام میگذارید.
import java.nio.file.Path;
import java.nio.file.Paths;
public class Route {
public static void main(String[] args) {
Path p = Paths.get("note.txt");
System.out.println(p.getFileName());
}
}
از پوشهای که Route.java را نگه میدارد، javac Route.java را اجرا کنید. وقتی پرانتزها، آکولادها و نقطهویرگولها جور باشند، خودِ javac سطری از خودش نمینویسد. بعد java Route را اجرا کنید — نه java Route.java. پسوند .java را از فرمان اجرا بردارید. اگر javac نتواند Path یا Paths را پیدا کند، سطرهای import نیستند یا غلط تایپ شدهاند — قبل از دنبال کردن خطاهای دیگر آنها را برگردانید.
صفحه note.txt را نشان میدهد. آن قطعهٔ آخر مسیر است. برنامه نباید برای ورودی صفحهکلید مکث کند. اگر ترمینال بدون چاپ خالی بماند، شاید هنوز فایل نوشتن Store را اجرا میکنید که هرگز println صدا نمیزند — به java Route بروید. اگر داستان محتوای tea یا oak میبینید، نوشتن یا خواندن را با این درس نامگذاری قاطی کردهاید. اگر blocked یا after میبینید، باقیماندهٔ Guard هنوز اجرا میشود.
یکبار اجرا را راه بروید. Java از Route.main شروع میکند. Paths.get مسیر را از "note.txt" میسازد. getFileName قطعهٔ آخر را برمیدارد. println مقدار note.txt را نشان میدهد. چیزی روی دیسک باز نمیشود. فایل گمشده این خطها را متوقف نمیکند، چون هرگز فایل را باز نکردید. آن نامگذاری آرام نکتهٔ این دموی اول است: مسیر میتواند بهعنوان مقدار وجود داشته باشد حتی وقتی هیچ فایل متنی کنار کلاس آماده نشده باشد.
پیوستن نام پوشه و نام فایل
برنامهٔ دوم مسیر را از دو قطعه میسازد: پوشهٔ docs، بعد فایل note.txt. اول نام فایل را چاپ کنید، بعد والد را.
import java.nio.file.Path;
import java.nio.file.Paths;
public class Route {
public static void main(String[] args) {
Path p = Paths.get("docs", "note.txt");
System.out.println(p.getFileName());
System.out.println(p.getParent());
}
}
با javac Route.java ترجمه کنید، بعد java Route را اجرا کنید. خط اول note.txt است. خط دوم docs است. getFileName هنوز فقط قطعهٔ آخر را میدهد. getParent قطعهٔ پوشهای را میدهد که بالای آن نشسته است. این معنیها را جابهجا نکنید: والد note.txt نیست، و نام فایل docs نیست.
Paths.get با بیش از یک رشته قطعهها را بهترتیب به هم وصل میکند. در این فراخوانی تدریس جداکننده را دستی تایپ نمیکنید — Paths.get مسیر را برای شما میسازد. مسیر پیوستهشده بهخودیخود پوشه یا فایل نمیسازد. نامگذاری از نوشتن و خواندن جدا میماند.
اگر در آزمایشی روی مسیر تکنام getParent مقدار null چاپ کرد، بهخاطر این است که "note.txt" تنها در آن شیء مسیر قطعهٔ پوشه ندارد. دموی دوقطعه والد روشنی نگه میدارد تا صفحه docs را نشان دهد.
چاپ کل مسیر پیوستهشده
برنامهٔ سوم Paths.get("docs", "note.txt") را نگه میدارد و خودِ شیء مسیر را چاپ میکند.
import java.nio.file.Path;
import java.nio.file.Paths;
public class Route {
public static void main(String[] args) {
Path p = Paths.get("docs", "note.txt");
System.out.println(p);
}
}
دوباره ترجمه و اجرا کنید. صفحه مسیر پیوستهشده را بهصورت یک مقدار نشان میدهد — اغلب docs\note.txt یا docs/note.txt بسته به جداکنندهٔ سیستم. نکتهٔ تدریس این است که قطعهها وصل شدهاند، نه اینکه یک نویسهٔ اسلش را حفظ کنید. وقتی همان قطعهها را جدا میخواهید، خواندن getFileName و getParent را ترجیح دهید. اگر هر دو خط دموی قبل هنوز روشنتر حس میشوند، آن فایل دوخطی را موقع مطالعهٔ چاپ تکی نزدیک نگه دارید.
در این صفحه inheritance اختراع نکنید. هنوز داخل مسیر فایلهای دوره هستید. صفحهٔ بعد inheritance را با کلاسهایی که کلاس دیگر را extend میکنند شروع میکند. همچنین FileWriter را بهعنوان الزام داخل Route.java نچسبانید — نوشتن درس خودش را داشت. هر موضوع Errors and Files را در نام کلاس تدریس خودش نگه دارید تا اجراها صادق بمانند.
مقایسه با Store و Reader
در صفحهٔ نوشتن، java Store حروف را داخل note.txt گذاشت. در صفحهٔ خواندن، java Reader خطی از دیسک چاپ کرد. در این صفحه، java Route فقط مکانها را با Path و Paths.get نام میبرد. وقتی دوباره میخواهید فایل را باز کنید، Store و Reader را فقط بهعنوان تاریخ نزدیک نگه دارید؛ برای دموهای مسیر با java Route اجرا کنید.
Paths.get، getFileName و getParent نشانههای تازهاند. java.nio.file.Path و java.nio.file.Paths را import کنید. برای این دموهای نامگذاری به FileWriter یا Scanner نیاز ندارید.
این صفحه برای inheritance چه میگذارد
این صفحه مسیرها را نام میبرد. صفحهٔ بعد inheritance را شروع میکند، جایی که یک کلاس میتواند کلاس دیگر را extend کند. اینجا روی Paths.get و جدایی نام فایل در برابر والد بمانید. هنوز extends را بهعنوان الزام روی این دموهای Route اضافه نکنید.
پیش از inheritance
میتوانید Paths.get("note.txt") بسازید و از getFileName مقدار note.txt ببینید. میتوانید "docs" و "note.txt" را وصل کنید، note.txt ببینید، بعد والد docs را. میتوانید کل مسیر پیوستهشده را بهصورت یک مقدار چاپ کنید. Route.java را ترجمه کنید و برای هر دموی نگهداشتهشده java Route را بهنوبت اجرا کنید. صفحهٔ بعد inheritance است، جایی که کلاسها با extension نوع والد را شریک میشوند.
دموی تکنام را برای getFileName روشن نگه دارید. دموی دوقطعه را برای والد پوشهٔ روشن نگه دارید. چاپ پیوسته را وقتی یک خط صفحه میخواهید نگه دارید. inheritance را از این صفحه دور نگه دارید. این عادتها ایست بازرسی پیش از ادامه است. وقتی روی دموی دوخطی والدِ java Route مقادیر note.txt و docs ظاهر شد، paths کارش را برای این درس تمام کرده و برای موضوع بعدی دربارهٔ inheritance آمادهاید.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود