خواندن فایل در Java
یک فایل متنی ساده به نام note.txt در همان پوشهٔ برنامه آماده کنید. داخلش یک خط کوتاه بگذارید: oak. Reader.java را باز کنید، یک File برای note.txt بسازید، آن را در Scanner بپیچید، nextLine() را چاپ کنید، بعد scanner را close کنید. با javac Reader.java ترجمه کنید و java Reader را اجرا کنید. صفحه باید oak را نشان دهد. دموی دوم بهجایش missing.txt را باز میکند و با FileNotFoundException میایستد. نوشتن فایل با Java را برای صفحهٔ بعد بگذارید — برای این درس note.txt را دستی در ویرایشگر بسازید.
خواندن خطی که از قبل روی دیسک است
صفحههای قبل با استثناهایی ایستادند که گرفتید یا پرتاب کردید. این صفحه به حروفی میرسد که بعد از پایان برنامه در فایل میمانند. فایل تدریس را با نام Reader.java باز کنید. نام کلاس عمومی را Reader نگه دارید تا با نام فایل یکی باشد. دموهای پرتاب باقیماندهٔ Signal، بلوکهای catch مربوط به Guard، توقفهای آرایهٔ Alarm، و هر Scanner که با nextLine صفحهکلید از System.in میخواند را پاک کنید. برنامه نباید منتظر تایپ بماند. خواندن فایل هنوز از Scanner استفاده میکند، اما سازنده یک File میگیرد، نه صفحهکلید.
نزدیک بالای فایل به سه سطر import نیاز دارید:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
روی main بنویسید throws FileNotFoundException تا فایل گمشده بتواند بهعنوان آن استثنای checked ظاهر شود. داخل main نام فایل دیسک را بگذارید:
File note = new File("note.txt");
روی آن فایل یک scanner بسازید:
Scanner scan = new Scanner(note);
خط اول را چاپ کنید:
System.out.println(scan.nextLine());
بعد خواندن را تمام کنید:
scan.close();
قبل از ترجمه، کنار Reader.java فایل note.txt بسازید و دقیقاً oak را در خط اول تایپ کنید. فایل متنی را ذخیره کنید. برنامهٔ Java در این صفحه آن فایل متنی را نمیسازد.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Reader {
public static void main(String[] args) throws FileNotFoundException {
File note = new File("note.txt");
Scanner scan = new Scanner(note);
System.out.println(scan.nextLine());
scan.close();
}
}
از پوشهای که هم Reader.java و هم note.txt را نگه میدارد، javac Reader.java را اجرا کنید. وقتی پرانتزها، آکولادها و نقطهویرگولها جور باشند، خودِ javac سطری از خودش نمینویسد. بعد java Reader را اجرا کنید — نه java Reader.java. پسوند .java را از فرمان اجرا بردارید. اگر javac نتواند File یا Scanner را پیدا کند، سطرهای import نیستند یا غلط تایپ شدهاند — قبل از دنبال کردن خطاهای دیگر آنها را برگردانید.
صفحه oak را نشان میدهد. scanner خط اول را از فایل دیسک خواند و چاپ کرد. برنامه نباید برای ورودی صفحهکلید مکث کند. اگر ترمینال منتظر تایپ شما بماند، هنوز Scanner را به System.in وصل کردهاید نه به File note. سازنده را طوری درست کنید که File بگیرد. اگر empty یا پشتهای از IllegalArgumentException میبینید، باقیماندهٔ پرتاب Signal هنوز اجرا میشود — به java Reader با فایل تدریس خواندن فایل بروید. اگر 2 یا blocked میبینید، دموی قدیمی Alarm یا Guard هنوز کلاسی است که اجرا میکنید.
یکبار مسیر موفق را راه بروید. Java از Reader.main شروع میکند. شیء File نام note.txt را نگه میدارد. Scanner آن نام را باز میکند. nextLine خط اول را میکشد. println مقدار oak را نشان میدهد. close کار scanner را تمام میکند. چیز دیگری نباید چاپ شود. اگر پوشه note.txt نداشته باشد، زود به داستان فایل گمشده میخورید — اول فایل متنی را بسازید، بعد دوباره اجرا کنید.
اینجا nextLine یعنی خط بعدی در فایل، نه درخواست از کاربر. این استفادهٔ دوباره از نام متد بعد از صفحهٔ input آسان قاطی میشود. داستان را روشن نگه دارید: همان نام متد، منبع متفاوت. حروف oak در فایل متنی زندگی میکنند؛ کلاس Java فقط آنها را میخواند.
📊 File and Scanner roles
| Piece | What it does on this page |
|---|---|
| File | holds the disk name such as note.txt |
| Scanner | reads lines from that File with nextLine |
| close | finishes the Scanner read so the file handle is released |
نام گمشده FileNotFoundException پرتاب میکند
برنامهٔ دوم همان شکل را نگه میدارد اما به نامی اشاره میکند که روی ماشین نیست: missing.txt. آن فایل را نسازید. اجرا باید با FileNotFoundException بایستد.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Reader {
public static void main(String[] args) throws FileNotFoundException {
File note = new File("missing.txt");
Scanner scan = new Scanner(note);
System.out.println(scan.nextLine());
scan.close();
}
}
با javac Reader.java ترجمه کنید، بعد java Reader را اجرا کنید. اینبار برنامه oak چاپ نمیکند. ترمینال FileNotFoundException را گزارش میدهد. بند throws روی main میگذارد آن استثنای checked بدون catch در این صفحه از main بیرون برود. قبلاً catch را تمرین کردید؛ اینجا نکتهٔ تدریس این است که بشناسید نام فایل گمشده خواندن را متوقف میکند. وقتی دربارهٔ آن حرف میزنید املای نوع استثنا مهم است: FileNotFoundException. فقط گفتن «خطا» برای این درس خیلی مبهم است.
اگر تصادفی missing.txt ساختید، آن را پاک کنید یا رشته را به نامی برگردانید که نیست. وقتی صفحهٔ آرام با oak میخواهید دموی موفق note.txt را ترجیح دهید. دموی نام گمشده را فقط برای دیدن FileNotFoundException نگه دارید. فایلها را عمداً عوض کنید تا خواندن موفق و توقف نام گمشده موقع مطالعه در یک main درهم قاطی نشوند.
در این صفحه برای ساختن note.txt نوشتن Java اختراع نکنید. ساختن فایل متنی در ویرایشگر برای تمرین خواندن کافی است. صفحهٔ بعد نوشتن فایل با Java است تا برنامه خودش حروف را ذخیره کند. مسیرها و ابزارهای بیشتر فایل بعداً میآیند؛ این صفحه یک خواندن روشن و یک توقف نام گمشده روشن نگه میدارد.
مقایسه با throw روی Signal
در صفحهٔ throwing، java Signal وقتی فنجانها خالی بودند با IllegalArgumentException توقف ساخت. در این صفحه توقف برای فایل گمشده FileNotFoundException است و مسیر موفق خطی از دیسک چاپ میکند. اگر فایلهای Signal هنوز نزدیکاند فقط بهعنوان تاریخ نگه دارید؛ برای دموهای فایل با java Reader اجرا کنید تا صفحه با این درس یکی باشد.
تاریخ wrappers، آرایهها و catch تاریخ میمانند. امروز نشانههای تازه File، Scanner روی فایل، nextLine از دیسک، و FileNotFoundException هستند.
این صفحه برای نوشتن فایل چه میگذارد
این صفحه فقط فایلی را میخواند که از قبل هست، یا وقتی نام نیست میایستد. صفحهٔ بعد نشان میدهد حروف را با Java داخل فایل بنویسید. اینجا روی خواندن oak و نام بردن FileNotFoundException بمانید. هنوز فراخوانی write را بهعنوان الزام روی این دموهای Reader اضافه نکنید.
پیش از نوشتن فایل
میتوانید note.txt را با Scanner بخوانید و oak ببینید. میتوانید missing.txt را باز کنید و FileNotFoundException ببینید. Reader.java را ترجمه کنید و برای هر دموی نگهداشتهشده java Reader را بهنوبت اجرا کنید. note.txt را دستی کنار فایل کلاس بسازید. صفحهٔ بعد نوشتن فایل است، جایی که برنامه خودش متن را ذخیره میکند.
خواندن موفق را برای صفحهٔ آرام نگه دارید. دموی نام گمشده را برای دیدن توقف نگه دارید. نوشتن Java را از این صفحه دور نگه دارید. این سه عادت ایست بازرسی پیش از ادامه است. وقتی بعد از java Reader با حضور note.txt مقدار oak ظاهر شد، خواندن فایل کارش را برای این درس تمام کرده و برای موضوع بعدی دربارهٔ نوشتن فایل آمادهاید.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود