آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

آموزش چگونگی خواندن فایل متن در جاوا

دستکاری فایل های متن مهارتی است که در کار برنامه نویسی به خوبی با آن آشنا می شوید. در این بخش در مورد چگونگی باز کردن و نوشتن یک فایل متن فرا خواهید گرفت. اما منظور ما از فایل متن فایلی با متن داخل آن می باشد – متن ساده. می توانید در ویندوز کامپیوتر در برنامه هایی مانند Notepad، TextEdit در Mac، Gedit در محیط Linux/Gnome یک فایل متن ایجاد کنید.

اولین کاری که انجام خواهیم داد باز کردن یک فایل متن و خواندن محتوای آن می باشد.

خواندن فایل متن (Text File):

برای این کار یک پروژه ی جدید آغاز کنید. پوشه ی textfiles و گروه FileData را فرا بخوانید. درست در زیر خط پوشه و قبل از نام گروه یک عبارت مهم اضافه کنید:

import java.io.IOException;

پنجره ی کد گذاری شده ی شما مانند زیر خواهد بود:

آموزش جاوا

برای مقابله با اشتباهات، عبارت زیر را به متود اصلی اضافه کنید (متن در حالت bold نوشته شده است):


public static void main(String[ ] args) throws IOException {
}

ما به جاوا می گوییم که متود اصلی (main) خطای IOException را ایجاد می کند و اینکه این برنامه باید با آن مقابله کند. بعدها برای نمایش یک پیغام خطای مناسب برای یوزر بلوک try … catch را اضافه می کنیم، البته باید اشتباهی رخ دهد.

برای باز کردن فایل متن اجازه بدهید یک گروه جدید ایجاد کنیم. بنابراین از منوی NetBeans در بالا روی File > New File کلیک کنید. یک فایل جدید Java Class ایجاد کرده و آن را ReadFile بنامید. وقتی این گروه جدید ایجاد شد، سه عبارت مهم زیر را اضافه کنید:

import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;

بنابراین گروه جدید شما باید مشابه زیر باشد:

آموزش جاوا

(زیر خطوط وارد شده خط کشیده شده است، زیرا هنوز با آنها هیچ کاری انجام نداده ایم. این یک ویژگی NetBeans می باشد.)

از این گروه یک آبجکت جدید برای خواندن یک فایل ایجاد می کنیم. سازنده ی (constructor) زیر را به همراه یک فیلد خصوصی String به نام path به کد خود اضافه کنید:

آموزش جاوا

تمام کاری که در اینجا انجام می دهیم، انتقال به نام یک فایل و سپس توزیع نام فایل به مسیر فیلد می باشد.

اکنون کاری که لازم است انجام دهیم ایجاد متودی است که تمام خطوط کد را از فایل متن باز می گرداند. این خطوط در یک ردیف حفظ می شوند. بیانیه ی زیر را که فایل را باز می کند، اضافه کنید:

آموزش جاوا

نگران خطوط قرمز نباشید: این خطوط با اضافه کردن کد جدید از بین خواهند رفت. NetBeans آن را به این دلیل اضافه کرده که عبارت بازگشتی نداشته ایم.

دقت کنید که متود بر اساس بازگرداندن یک String array از طریق زیر تنظیم شده است:

public String[ ]

این array (ردیف) حاوی تمام خطوط فایل متن خواهد بود.

همچنین دقت کنید که به انتهای تیتر متود عبارت "throws IOException" را اضافه کرده ایم. هر متودی که مربوط به خواندن فایل های متن می شود به یکی از این موارد نیاز دارد. جاوا هر خطایی را در بالای خط وارد می کند، و این خطاها در متود اصلی (main) گرفته خواهند شد.

برای خواندن کاراکترهای فایل متن FileReader استفاده می شود. این برنامه بایت ها را از یک فایل می خواند که هر بایت یک کاراکتر مجزا می باشد. شما می توانید به جای خواندن کاراکترهای مجزا، تمام متن را بخوانید. برای انجام این کار می توانید FileReader را در جایی به نام BufferedReader توزیع کنید. BufferedReader دارای متودی به نام ReadLine می باشد. همانطور که از نام این متود پیداست، برای خواندن تمام خطوط و نه برای کاراکترهای مجزا استفاده می شود. آنچه BufferedReader انجام می دهد، ذخیره کردن کاراکترها در حافظه (buffer) می باشد طوری که به سادگی قابل اجرا باشند.

خطوط زیر را اضافه کنید که FileReader و BufferedReader را تنظیم می کند:

آموزش جاوا

در اینجا در حال ایجاد دو آبجکت هستیم: یکی آبجکت FileReader می باشد که ما fr نامیده ایم؛ دیگری نیز آبجکت BufferedReader می باشد که textReader نامیده می شود.

FileReader برای باز کردن نیاز به نام فایل دارد. برای ما، مسیر و نام فایل در متغیر فیلد به نام path نگهداری می شود.

BufferedReader آبجکت FileReader خود را پرانتزها قرار می دهد. همه ی کاراکترهای فایل نیز در حافظه نگهداری می شوند که منتظر اجرا می باشند. آنها تحت عنوان نام متغیر textReader حفظ می شوند.

قبل از اینکه بتوانیم خطوط متن را بخوانیم، نیاز به تنظیم یک array داریم. هر موقعیت در array نیز می تواند یک خط کامل از متن را در خود حفظ کند. بنابراین دو خط زیر را به کد خود اضافه کنید:

مثال:


int numberOfLines = 3;

String[ ] textData = new String[numberOfLines];

اکنون تعداد خطوط فایل متن را فقط تا 3 تنظیم خواهیم کرد. واضح است که فایل های متن می توانند هر تعداد خط را در خود داشته باشند، و معمولا ما تعداد را نمی دانیم. بنابراین این مسئله را خیلی زود تغییر خواهیم داد و یک متود مجزا خواهیم نوشت که تعداد خطوط را در یک فایل متن به دست می آورد.

دومین خط از کد جدید یک String array تنظیم خواهد کرد. تعداد موقعیت های یک array ( اندازه ی آن)، به تعداد خطوط تنظیم می شود. این عدد را بین کروشه قرار می دهیم.

برای قرار دادن تمام خطوط فایل در موقعیت های مختلف یک array، نیاز به یک loop داریم. Loop هر خط از متن را گرفته و هر خط را در یک array قرار می دهد. خطوط زیر را به کد خود اضافه کنید:

مثال:

int i;

for (i=0; i < numberOfLines; i++) {

textData[ i ] = textReader.readLine();

}

پنجره ی کد گذاری شما مانند زیر خواهد بود:

آموزش جاوا

for loop از 0 شروع می شود و تا کمتر از خطوط خطوط می باشد. ( به یاد داشته باشید که موقعیت های array ها در 0 شروع می شوند. سه خط در موقع

یت های 0، 1 و 2 ذخیره خواهند شد.)

خطی که به خطوط متن دسترسی یافته و آنها را در یک array ذخیره می کند، خط زیر می باشد:

textData[i] = textReader.readLine( );

بعد از علامت تساوی خط زیر را خواهیم داشت:

textReader.readLine( );

آبجکت textReader را که تنظیم کزده ایم، تمام کاراکترهای فایل متن را در حافظه (the buffer) حفظ می کند. می توانیم از متود readLine برای خواندن یک خط کامل از حافظه استفاده کنیم. پس از خوانده شدن خط، خط را در موقعیت یک array ذخیره می کنیم:

textData[i]

متغیری به نام i هر بار loop را افزایش خواهد داد، بنابراین وارد کل خطوط ذخیره شده ی متن در array می شود.

اکنون فقط دو خط دیگر از کد باید به متود اضافه شوند. بنابراین این خطوط را به کد خود اضافه کنید:

textReader.close( );

return textData;

خط گزارش شده، تمام array را گزارش می دهد. دقت کنید که برای نام array نیازی به کروشه نیست. وقتی کد را اضافه کرده اید، تمام خطوط زیر کد باید محو شوند و متود شما باید شبیه به تصویر زیر باشد:

آموزش جاوا

به هرحال هنوز مشکل تعداد خطوط وجود دارد. در اینجا این را به 3 تنظیم کرده ایم. آنچه نیاز داریم این است که وارد فایل متن شده و خطوط آن را بشمریم. بنابراین متود زیر را به گروه ReadFile اضافه کنید:

آموزش جاوا

متد جدید readLines نامیده می شود و طوری تنظیم شده تا یک مقدار صحیح گزارش دهد. این عدد صحیح تعداد خطوط یک فایل متن می باشد. دقت کنید که این متود دارای یک بخش IOException در تیتر متود می باشد.

کد برای متد یک FileReader دیگر و BufferedReader دیگر تنظیم می کند. Loop خطوط متن را گرد کرده و سپس عبارات زیر را داریم:

مثال:

while ( ( aLine = bf.readLine( ) ) != null ) {

numberOfLines++;

}

while loop کمی گیج کننده به نظر می رسد. اما در واقع فقط می گوید " هر خط از متن را خوانده و وقتی به یک مقدار تهی (null value ) می رسید، توقف کنید." ( اگر خط زیادی در یک فایل متن وجود نداشته باشد، جاوا یک مقدار تهی را گزارش می دهد.) در داخل آکولادها یک شمارشگر به نام numberOfLines را وارد کرده ایم.

دو خط آخر کد حافظه ی بافر به نام bf را تحت فشار می گذارد، و تعداد خطوط را گزارش می دهد.

برای وارد کردن این متود به مرحله ی عمل، این خط را در متود OpenFile خود تغییر دهید:

int numberOfLines = 3;

آن را به شکل زیر تغییر دهید:

int numberOfLines = readLines( );

بنابراین به جای کدگذاری تعداد خطوط، می توانیم متود جدید خود را فراخوانده و تعداد خطوط را در هر فایل متنی به دست آوریم.

بسیار خوب، زمان آن رسیده که گروه جدید را به کار گرفته و مشاهده کنیم که آیا فایل متن را باز می کند یا نه.

به گروه FileData بازگردید، گروهی با متود اصلی در آن. یک متغیر رشته تنظیم کنید تا نام فایل متن را در خود داشته باشد:

آموزش جاوا

در این مرحله نیاز به ایجاد یک فایل متن در جایی از کامپیوتر خود دارید، ما این فایل ساده را در Notepad در ویندوز سیستم ایجاد می کنیم:

آموزش جاوا

نام فایل متن "test.txt" می باشد. یک فایل متن مشابه روی کامپیوتر خود ایجاد کنید. دقت کنید که آن را کجا ذخیره می کنید، زیرا به مسیر فایل نیز احتیاج دارید:

String file_name = "C:/test.txt";

بنابراین فایل test.txt در درایو C ذخیره می شود. اگر برای حفظ فایل فولدری به نام MyFiles ایجاد کردیم، مسیر "C:/MyFiles/test.txt" خواهد بود. اگر لازم باشد، می توانید مسیر فایل خود را تغییر دهید.

کار دیگری که باید انجام دهید، ایجاد آبجکت جدید از گروه ReadFile می باشد. سپس می توانیم متودی را فرا بخوانیم که فایل را باز می کند. اما می توانیم این کار را در یک بلوک try … catch انجام دهیم. کد زیر را درست زیر خط متغیر String ضافه کنید:

آموزش جاوا

پرانتزهای مربوط به بلوک try … catch را فراموش نکنید. برای بخش try یک جفت آکولاد و برای بخش catch یک جفت دیگر نیاز دارید. برای بخش try خطوط زیر را داریم:

مثال:




ReadFile file = new ReadFile( file_name );

String[ ] aryLines = file.OpenFile( );

خط اول یک آبجکت جدید ReadFile به نام file تنظیم می کند. بین پرانتزهای ReadFile، متغیر file_name را اضافه می کنیم. این برای ارائه ی constructor به مسیر فایل مورد نیاز کافی می باشد.

خط دوم از کد یک ردیف رشته (String array) به نام aryLines تنظیم می کنیم. بعد از علامت تساوی متود OpenFile از گروه ReadFile را فرا خواندیم. اگر با موفقیت فایل متن را باز کند، سپس ردیف خطوط متن در یک array aryLines جدید توزیع خواهد شد.

به هرحال اگر اشتباهی رخ دهد، یک خطا وارد خط شده و در بخش catch از بلوک try … catch به پایان می رسد:

مثال:

catch ( IOException e ) {

System.out.println( e.getMessage() );

}

بعد از لغت catch، یک جفت پرانتز وجود دارد. در داخل پرانتزها عبارت زیر را داریم:

IOException e

کاری که این عبارت انجام می دهد، تنظیم متغیری به نام e می باشد که از نوع IOException می باشد. آبجکت IOException دارای متودهایی از نوع خود می باشد که می توانید از آنها استفاده کنید. یکی از این متودها getMessage می باشد. این متود به یوزر اطلاعاتی در مورد اشتباه رخ داده ارائه می دهد.

قبل از اینکه مثالی در مورد یک پیغام خطا مشاهده کنیم، اجازه بدهید از طریق همه ی خطوط فایل متن loop انجام دهیم و هر کدام را چاپ کنیم. کد زیر را به بخش try از بلوک try … catch اضافه کنید:

مثال:



int i;

for ( i=0; i < aryLines.length; i++ ) {

System.out.println( aryLines[ i ] ) ;

}

پنجره ی کد گذاری شما باید مشابه زیر باشد:

آموزش جاوا

وقتی که برنامه اجرا می شود، پنجره ی Output مورد زیر را چاپ خواهد کرد:

همانطور که مشاهده می کنید، هر خط از فایل متن چاپ شده است.

برای امتحان کردن کد بخش چک کننده ی خطا (error checking)، نام فایل متن را موردی که می دانید ایجاد نشده، تغییر دهید. سپس کد خود را مجددا اجرا کنید. در پنجره ی Output در تصویر زیر، مشاهده می کنید که فایل متن ما به testB تغییر یافته است و نمی تواند یافت شود:

آموزش جاوا

اگر تمایل دارید، می توانید پیغام خطای خود را به بخش catch اضافه کنید:

آموزش جاوا آموزش جاوا

گرچه بهتر است آن را به جاوا واگذار کنید. در بخش بعد به چگونگی نوشتن فایل متن با استفاده از کد جاوا، خواهیم پرداخت.

  • 16582
  •    2436
  • تاریخ ارسال :   1394/07/27

دانلود PDF دانلود سورس کد دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .