"হ্যালো, অ্যামিগো! গতকাল ঋষি আপনাকে FileInputStream এবং FileOutputStream সম্পর্কে বলেছিল । এবং আজ আমি আপনাকে FileReader এবং FileWriter ক্লাস সম্পর্কে বলব ।"

আপনি সম্ভবত ইতিমধ্যে অনুমান করেছেন যে, এই সমস্ত ক্লাসগুলি হল ফাইল অবজেক্ট এবং ইনপুটস্ট্রিম , আউটপুটস্ট্রিম , রিডার এবং রাইটার "ইন্টারফেস" এর মধ্যে অ্যাডাপ্টার।

"এগুলি ফাইল এবং রিডার/রাইটারের মধ্যে অ্যাডাপ্টারের মতো, কিন্তু আপনাকে শুধুমাত্র কনস্ট্রাক্টরের কাছে একটি স্ট্রিং অবজেক্ট পাস করতে হবে, একটি ফাইল নয়!"

"আসলে, তাদের বেশ কয়েকটি কনস্ট্রাক্টর রয়েছে। ফাইল এবং স্ট্রিং অবজেক্ট উভয়ের জন্যই কনস্ট্রাক্টর রয়েছে। আপনি যদি কনস্ট্রাক্টরকে একটি স্ট্রিং অবজেক্ট পাস করেন, তাহলে কনস্ট্রাক্টর পাস করা স্ট্রিং অবজেক্ট থেকে নেওয়া ফাইল পাথ ব্যবহার করে শান্তভাবে একটি ফাইল অবজেক্ট তৈরি করবে।"

এই সুবিধার জন্য. জাভা-এর নির্মাতারা এই ক্লাসগুলির জন্য সর্বাধিক ঘন ঘন ব্যবহারের ক্ষেত্রে নিয়েছিলেন এবং তাদের সকলের জন্য কনস্ট্রাক্টর লিখেছেন। এটা বেশ সুবিধাজনক, আপনি কি মনে করেন না?

"ওহ, হ্যাঁ। সুবিধাজনক। আমি রাজি। তবে কেন আমাকে ক্রমাগত লিখতে হবে:"
বাফারডরিডার বাফারডরিডার = নতুন বাফারডরিডার(নতুন ইনপুটস্ট্রিমরিডার(সিস্টেম.ইন));
"কেন তারা এই ব্যবহারের ক্ষেত্রে যোগ করেনি?"

"এখানে সমস্যা হল যে একটি   সাধারণ জাভা প্রোগ্রাম কনসোলের সাথে কাজ করে না। সত্যি বলতে, আপনি এটি থেকে প্রায় কিছুই পড়েন না। এমনকি একটি ওয়েব সার্ভার, অ্যাপ্লিকেশন সার্ভার বা অন্য কোনো জটিল সিস্টেমের সাথেও।"

কিন্তু কনসোলে ডেটা এবং টেক্সট আউটপুট করার জন্য আমাদের কাছে প্রিন্টস্ট্রিম আছে। কারণ এই "সার্ভার অ্যাপ্লিকেশনগুলি" প্রায়শই তাদের স্থিতি, ত্রুটি এবং অন্যান্য সমস্ত ধরণের তথ্য প্রদর্শন করতে কনসোল ব্যবহার করে।

"বুঝলাম। এবং আপনি ফাইলরিডার এবং ফাইল রাইটার ব্যবহার করে একটি ফাইল কপি করতে পারেন?"

"হ্যাঁ, যদি এটি একটি পাঠ্য ফাইল হয় (অর্থাৎ এটি অক্ষর নিয়ে গঠিত)। এখানে একটি উদাহরণ:"

ডিস্কে একটি ফাইল কপি করুন
public static void main(String[] args) throws Exception
{
 FileReader reader = new FileReader("c:/data.txt");
 FileWriter writer = new FileWriter("c:/result.txt");

 while (reader.ready()) //as long as there are unread bytes in the input stream
 {
  int data = reader.read(); //Read one character (the char will be widened to an int)
  writer.write(data); //Write one character (the int will be truncated/narrowed to a char)
 }

 //Close the streams after we done using them
 reader.close();
 writer.close();
}

"প্রায় কোন পার্থক্য নেই।"

"হ্যাঁ, পার্থক্য ন্যূনতম।"