بخشی از پاورپوینت
اسلاید 1 :
فایل و ورودی/خروجی در جاوا Java IO and Files
اسلاید 3 :
سرفصل مطالب
ورودی و خروجی برنامهها (IO)
برنامهنویسی فایل
جریانهای ورودی و خروجی (Stream)
خواننده و نویسنده (Reader/Writer)
مفهوم Serialization
برنامهنویسی تحت شبکه (Socket Programming)
امکانات نسخههای جدید جاوا برای کار با فایلها
اسلاید 4 :
درباره فایلها
اسلاید 5 :
فایل
یک فایل چیست؟
مجموعهای از بایتها که در حافظه جانبی ذخیره شدهاند
چرا ما به فایل نیاز داریم؟
ذخیرهسازی ماندگار
فرایند استفاده از یک فایل در یک برنامه چگونه است؟
1- باز کردن (open) 2- خواندن/نوشتن (read/write) 3- بستن (close)
(این موارد توسط سیستمعامل به برنامهها ارائه میشوند)
انواع فایلها کدامند؟
باینری (binary)، متنی (text)
اسلاید 6 :
انواع فایل
فایل متنی (text files)
کوچکترین واحد سازنده: کاراکترها
مانند فایلهای txt ، xml ، html و .
فایل باینری (binary files)
واحدهای سازنده: بایتها
مانند فایلهای exe ، zip ، pdf ، docx و .
نکته: دستهبندی فوق درباره بر نحوه "ذخیرهسازی" فایل است، نه نمایش آن
مثلاً pdf و docx نمایش متنی دارند، ولی به صورت باینری ذخیره میشوند
نکته: فایلهای متنی هم از بایتها تشکیل میشوند
هر کاراکتر از یک یا چند بایت تشکیل میشود
اسلاید 7 :
کاراکترها در جاوا
جاوا از استاندارد Unicode برای کاراکترها پشتیبانی میکند
استانداردهای قدیمیتر مانندASCII محدود بود
کاراکترهایی مثل حروف فارسی و ژاپنی در ASCII پشتیبانی نمیشود
استاندارد Unicode یک مجموعه کاراکتر (character set یا charset) است
هر کاراکتر، به صورت یک عدد در کامپیوتر ذخیره میشود
نحوه تبدیل کاراکتر به عدد توسط روشهای کدگذاری (encoding) تعیین میشود
روشهای کدگذاری مختلفی برای یونیکد ارائه شده است، مانند UTF-8 ، UTF-16 و UTF-32
جاوا از کدگذاریUTF-16 استفاده میکند (البته کدگذاریهای دیگر هم پشتیبانی میشود)
هر کاراکتر در UTF-16 معمولاً در دو بایت ذخیره میشود
در قدیم، روشهای کدگذاری دیگری (غیریونیکد) رایج بودند، مثل Windows-1256
اسلاید 8 :
جریان داده (Stream)
اسلاید 9 :
جریان (Streams)
جریان اطلاعات به داخل برنامه یا خارج از یک برنامه، مانند:
ذخیره و بازیابی از فایل
ارسال اطلاعات از طریق شبکه
تبادل داده با دستگاههای جانبی (مثلاً اسکنر)
و .
کتابخانه java.io کلاسهای متنوعی برای کار با فایلها و جریانها دارد
جریان ورودی به برنامه (آنچه برنامه میخواند) : Input Stream
جریان خروجی از برنامه (آنچه برنامه تولید میکند) : Output Stream
اسلاید 10 :
جریان ورودی و خروجی
Input Stream
Output Stream
اسلاید 11 :
کلاسهای Java IO
ورودی و خروجیهای متنی (جریان متنی)
جریانی از کاراکترها
امکانات جاوا برای این منظور: کلاسهای Reader و Writer
مثال: خواندن/نوشتن یک فایل txt تبادل متن تحت شبکه (مثلاً برنامه چَت)
ورودی و خروجیهای باینری (جریان باینری)
جریانی از بایتها
امکانات جاوا: کلاسهای InputStream و OutputStream
مثال: برای خواندن و نوشتن یک فایل zip یا pdf
اسلاید 12 :
بستن منبع (close)
بسياری از کلاسهای مربوط به کار با فایلها و جریان دادهها متد close() دارند
در انتهای کار با شیء، باید شیء مربوطه close شود
وگرنه، برنامه منابعی گرفته که آزاد نکرده است
مثلاً باز شدن و بسته شدن فایل: از طریق سیستمعامل و سیستمفایل انجام میشود
فایل باز: یک منبع (resource) از طرف سیستمعامل که به برنامه تخصیص داده شده
این منبع، باید از طریق متد close() آزاد شود
اگر آن را نبندیم، یک منبع از سیستم عامل گرفتهایم که آزاد نشده است
فایل، یک منبع است که باید بعد از باز شدن و در انتهای کار با آن، آزاد شود. وگرنه:
تعداد فایلهای قابل باز کردن محدود است، امکان باز کردن آن فایل در برنامههای دیگر کمتر میشود و .
اسلاید 13 :
بستن منبع با کمک متد close()
مهمترین منبعی که برنامهها میگیرند: حافظه
مثلاً با کمک عملگر new
آزادسازی حافظه به صورت خودکار توسط زبالهروب انجام میشود
اما برنامهها منابع دیگری هم میگیرند
مانند فایلهایی که باز میکنند
یا سایر جریانها (strream)
برنامهنویس موظف است این منابع را آزاد کند (با کمک متد close)
آزادسازی این منابع به صورت خودکار انجام نمیشود
اسلاید 14 :
فایلهای متنی
اسلاید 15 :
کلاس FileReader
کلاس Reader یک کلاس انتزاعی (abstract class) است
کلاس FileReader یکی از زیرکلاسهایReader است
برای خواندن از "فایل متنی" به کار میرود
برای مطالعه Reader از کلاس FileReader مثال میزنیم:
FileReader inf = new FileReader("readme.txt");
int chCode;
while(-1 != (chCode=inf.read()) )
System.out.println("Next:"+(char)chCode);
inf.close();
چرا Reader.read() یک int برمیگرداند، نه یک char ؟
پاسخ: برای تشخیص پایان فایل (با -1 مشخص میشود)
اسلاید 16 :
کلاس FileReader
ایجاد شیء:
با ایجاد شیء، فایل موردنظر برای خواندن متن باز میشود (open)
خواندن یک کاراکتر: متد read()
بستن فایل: متد close()
اما معمولاً فایل متنی را کاراکتر-کاراکتر نمیخوانیم
معمولاً از متد read() استفاده نمیشود
متدهای دیگری برای خواندن حجم بیشتری از اطلاعات وجود دارد. مثال:
(تعداد کاراکترهایی که خواندهشده را برمیگرداند)
روشهای دیگری هم وجود دارد که بعداً خواهیم دید
FileReader fr = new FileReader(file_location);
int read(char[ ] cbuf)
اسلاید 17 :
مثال برای Writer : کلاس FileWriter
کلاس Writerیک کلاس انتزاعی (abstract class) است
کلاس FileWriter یکی از زیرکلاسهای Writer است
برای نوشتن در "فایل متنی" به کار میرود. مثال:
در صورت وجود فایل موردنظر، محتوای آن پاک میشود
در غیر این صورت، فایل موردنظر ایجاد میشود
برای اضافه کردن به انتهای یک فایل موجود (append)، آن را اینگونه ایجاد کنید:
FileWriter writer = new FileWriter("writeme.txt");
writer.write("This is a line. \n");
writer.write("This is the second line. \n");
writer.close();
FileWriter wr = new FileWriter("text.txt", true);
اسلاید 18 :
خطای IOException
هنگام کار با فایلها و جریانها، ممکن است خطای IOException پرتاب شود
مثلاً:
خواندن از فایلی که وجود ندارد (FileNotFoundException)
نقض مجوز دسترسی به فایل
مثال:
try {
FileWriter writer= new FileWriter("f.txt");
writer.write("a line. \n");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
اسلاید 19 :
جریان باینری
اسلاید 20 :
جریان (Stream)
در جاوا کلاسهایی برای کار با جریان داده (Stream) داریم:
کلاس InputStream برای خواندن از جریان داده
کلاس OutputStream برای نوشتن در جریان داده
هر شیء از این کلاسها به یک جریان داده متصل میشود
مثالهایی از یک جریان داده:
فایل، تبادل اطلاعات در بستر شبکه، تبادل اطلاعات با یک دستگاه جانبی (مثل اسکنر)
ورودی و خروجی استاندارد:
InputStream is = System.in;
OutputStream os = System.out;