|
کار با فایل ها, خواندن ورودی از فایل و نوشتن برروی فایل
خواندن ورودی ویا input از فایل ویا نوشتن بروی فایل ویا دوسیه یکی از بخش های مهم پروگرام نویسی را در برمیگیرد. در زبان جاوا میتوانیم به آسانی با استفاده از جند متود فایل ها را بخوانیم ویا بروی آنهای بنویسیم.
اما قبل از آن باید مفهوم try ... catch را فهمید.
برسی استثناء ویا exception handling :
اکثر اوقات هنگام اجرای پروگرام بعضی استثناهات پیش میآید که باعث پایان یافتن جریان پروگرام میشود
مانند تقسیم بر صفر وغیره.
استفاده از try...catch به ما کمک میکند تا استثناهات را کنترول نماییم.
ساختمان اساسی این عملکرد بطور زیر میباشد:
try {
expression1
}
catch (Exception e)
{
expression2
}
خواندن معلومات از روی فایل:
در این بخش از درس خود میخواهیم تا معلومات داخل یک فایل بنام input.txt را خوانده و بعد بروی صفحه کمپیوتر print نماییم.
فایل مورد نظر ما باید در عین folder که فایل های جاوا موجود است قرار داشته باشد.
1. // Reading A File in Java //
2. import java.util.Scanner;
3. import java.io.*;
4. class readFile
5. {
6. public static void main(String args[])
7. {
8. String line;
9. try {
10. Scanner input = new Scanner(new File("file.txt"));
11. while(input.hasNextLine())
12. {
13. line = input.nextLine();
14. Scanner data = new Scanner(line);
15. while (data.hasNext())
16. {
17. System.out.println("Province : " + data.next() + ", City : " + data.next());
18. }
19. }
20. }
21. catch (Exception e)
22. {
23. System.out.println("File Not Found");
24. }
25. }
26. }
کد بین سطر های 9 و 20 زمانی انجام میآبد که کدام استثناء از قبیل موجود نبودن فایل پیش نیاید.
در صورتیکه فایل مورد نظر دریافت نگردد, پیام سطر 23 اجرا میگردد.
در دروس قبلی گفته شد که کلاس Scanner جهت خواندن ورودی بکار میرود. در اینجا ما این کلاس را جهت خواندن ورودی ویا input از فایل بکار میبریم. سطر دهم طریق استفاده آن را نشان میدهد. داخل اشارت های ناخن اسم فایل خود را با extension آن (....txt, .doc, .docx ) مینویسیم.
در سطر 11 یک متود نو بنام ()hasNextLine بکار رفته که قیمت برگشتی ویا return value این متود boolean ویا (true, false) میباشد. اگر داخل فایل سطر بعدی موجود باشد ویا اینکه سطر بعدی فایل داده شده خالی نباشد قیمت برگشتی این متود true میباشد در غیر صورت قیمت برگشتی ویا return value آن false است.
در سطر 13 متود دیگری بنام ()nextLine بکار رفته است. این متود یک سطر کامل را از داخل فایل گرفته و در داخل متغیر line که در سطر 8 معرفی شده است ذخیره میکند.
در سطر 14 یک object دیگری از کلاس Scanner را معرفی نموده و در داخل آن سطری را که از فایل خوانده ایم بحیث input
میگذاریم.
متود ()hasNext سطر داده شده را تا کرکتر space کنترول میکند و اگر بعد از space کلمه دیگری موجود باشد return value آن true در غیر آن false است.
در سطر 17 متود ()next کلمه بین دو space را به ما میدهد. مثلا اگر سطر داده شده شامل طبق ذیل باشد: kabul balkh herat faryab. در این حالت هر باریکه متود ()next فراه خوانده شود یکی از این کلمات بترتیب حاصل میگردد.
معلومات داخل فایل در پروگرام فوق قرار ذیل است:
kabul kabul
balkh mazarisharif
juzjan sheberghan
faryab maymana
samangan aybak
nimroz zarange
nangarhar jalalabad
kunar asadabad
bamyan bamyan
saripul saripul
خروجی ویا output پروگرام بشکل زیر میباشد:
Province : kabul, City : kabul
Province : balkh, City : mazarisharif
Province : juzjan, City : sheberghan
Province : faryab, City : maymana
Province : samangan, City : aybak
Province : nimroz, City : zarange
Province : nangarhar, City : jalalabad
Province : kunar, City : asadabad
Province : bamyan, City : bamyan
Province : saripul, City : saripul
نوشتن معلومات در فایل:
جهت نوشتن معلومات بروی فایل از متود BufferedWriter کار خواهیم گرفت. معرفی این متود بشکل زیر میباشد.
BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
پروگرام زیر عبارت "WWW.YASHLAR.NET" را در فایل بنام output.txt مینویسد.
1. // Writing Data To Files in Java //
2. import java.io.*;
3. class writeFile
4. {
5. public static void main(String args[])
6. {
7. try {
8. BufferedWriter output = new BufferedWriter(new FileWriter("output.txt"));
9. output.write("WWW.YASHLAR.NET");
10. System.out.println("Succeed");
11. output.close();
12. }
13. catch (Exception e)
14. {
15. System.out.println("File Not Found");
16. }
17. }
18. }
در سطر 8 یک متغیر متود BufferedWriter بنام output معرفی شده است.
فایلی که میخواهیم بروی آن بنویسیم بنام output.txt میباشد که در داخل اشارت ناخن معرفی شده است.
متود نوی بنام ()write در سطر 9 معرفی شده است که وظیفه آن عبارت داده شده را بروی فایل نوشتن است.
بعدی از نوشتن معلومات بروی فایل, فایل خود را توسط متود ()close که در سطر 11 شناخته شده است بسته مینماییم.
پروگرام زیر معلوماتی را که در پروگرام قبلی از فایل خواندیم در فایل دیگری بنام output.txt ذخیره میکند. این پروگرام ابتدا معلومات را از فایل بنام file.txt خوانده بعد آنها را در فایل دیگری بنام output.txt ذخیره مینمایید.
1. // Writing Data To Files in Java //
2. import java.util.Scanner;
3. import java.io.*;
4. class writeFile {
5. public static void main(String args[]) {
6. String line;
7. try {
8. Scanner input = new Scanner(new File("file.txt"));
9. BufferedWriter output = new BufferedWriter(new FileWriter("output.txt"));
10. while(input.hasNextLine()) {
11. line = input.nextLine();
12. Scanner data = new Scanner(line);
13. while (data.hasNext()) {
14. output.write("Province : ");
15. output.write(data.next());
16. output.write(", City : ");
17. output.write(data.next());
18. output.newLine();
19. }
20. }
21. output.close();
22. }
23. catch (Exception e) {
24. System.out.println("File Not Found");
25. }
26. System.out.println("Succeed");
27. }
28. }
جهت تمرین برنامه بنویسید که مشخصات (اسم, تخلص و محل تولد) 10 شاگرد را از فایلی بنام info.txt خوانده و بروی صفحه کمپیوتر نمایش دهد. بعد معلومات خوانده شده را در فایل دیگری بنام infoCopy.txt ذخیره نماید.
|