"আমরা ফাইল ইনপুট/আউটপুটের জন্য স্ট্রীম দিয়ে শুরু করব। তবে প্রথমে জিনিসগুলি আগে।"

ফাইল পড়া এবং লেখার জন্য দুটি ক্লাস আছে: FileInputStream এবং FileOutputStream । আপনি সম্ভবত ইতিমধ্যে অনুমান করেছেন, FileInputStream একটি ফাইল থেকে ক্রমানুসারে বাইট পড়তে পারে এবং FileOutputStream ক্রমানুসারে একটি ফাইলে বাইট লিখতে পারে। এই ক্লাসের পদ্ধতিগুলি এখানে রয়েছে:

পদ্ধতি পদ্ধতি কি করে
FileInputStream(String fileName);
— এই কনস্ট্রাক্টর. এটি আপনাকে ডিস্কে একটি ফাইলের নাম নির্দিষ্ট করতে দেয়, যেখান থেকে তৈরি বস্তুটি ডেটা পড়বে।
int read();
— এই পদ্ধতিটি ফাইল থেকে একটি বাইট পড়ে এবং এটি ফেরত দেয়। রিটার্ন মান একটি int প্রশস্ত করা হয়.
int available();
— এই পদ্ধতি অপঠিত (উপলভ্য) বাইটের সংখ্যা প্রদান করে।
void close();
— এই পদ্ধতিটি স্ট্রীমকে "বন্ধ" করে। আপনি যখন স্ট্রীমের সাথে কাজ শেষ করেন তখন আপনি এটিকে কল করেন।
বস্তুটি তখন ফাইলটি বন্ধ করার জন্য প্রয়োজনীয় হাউসকিপিং ক্রিয়াকলাপগুলি সম্পাদন করে, ইত্যাদি৷
এই সময়ে, আপনি স্ট্রীম থেকে আর কোনও ডেটা পড়তে পারবেন না৷

এটির মজার জন্য, আসুন একটি ফাইলের সমস্ত বাইটের যোগফল গণনা করি। কোডটি দেখতে কেমন তা এখানে:

একটি ফাইলে সমস্ত বাইট যোগ করুন
public static void main(String[] args) throws Exception
{
 //Create a FileInputStream object bound to «c:/data.txt».
 FileInputStream inputStream = new FileInputStream("c:/data.txt");
 long sum = 0;

 while (inputStream.available() > 0) //as long as there are unread bytes
 {
  int data = inputStream.read(); //Read the next byte
  sum +=  data; //Add it to the running total
 }
 inputStream.close(); // Close the stream

 System.out.println(sum); // Display the sum on the screen.
}

"আমরা ইতিমধ্যেই এরকম কিছু দেখেছি৷ ফাইলআউটপুটস্ট্রিম কীভাবে সংগঠিত হয়?"

"ঠিক আছে। এই দেখুন:"

পদ্ধতি পদ্ধতি কি করে
FileOutputStream (String fileName);
"এটি কনস্ট্রাক্টর। এটি আপনাকে ডিস্কের একটি ফাইলের নাম উল্লেখ করতে দেয়, যেখানে তৈরি করা বস্তু ডেটা লিখবে।"
void write(int data);
"এই পদ্ধতিটি পরবর্তী বাইট লেখে, এক বাইটে ডেটা ছাঁটাই করে।"
void flush();
"লিখতে হবে এমন ডেটা প্রায়ই প্রথমে মেমরিতে বড় ব্লকে সংগ্রহ করা হয় এবং তারপর শুধুমাত্র ডিস্কে লেখা হয়।"

ফ্লাশ কমান্ড সমস্ত অসংরক্ষিত তথ্য ডিস্কে লিখতে বাধ্য করে।

void close();
"এই পদ্ধতিটি স্ট্রীমটিকে «বন্ধ করে দেয়»। আপনি যখন স্ট্রীমের সাথে কাজ শেষ করেন তখন আপনি এটিকে কল করেন।"
বস্তুটি তারপর ফাইলটি বন্ধ করার জন্য প্রয়োজনীয় গৃহস্থালির ক্রিয়াকলাপগুলি সম্পাদন করে, ইত্যাদি।

আপনি আর স্ট্রীমে ডেটা লিখতে পারবেন না, এবং ফ্লাশ স্বয়ংক্রিয়ভাবে বলা হয়।

"এটাই?"

"হ্যাঁ, লেখার জন্য আসলে একটি মাত্র পদ্ধতি আছে: লিখুন()। এটি এক সময়ে শুধুমাত্র একটি বাইট লেখে। কিন্তু এটি আপনাকে ফাইলে যত তথ্য চান ততটুকু লিখতে দেয়।"

প্রোগ্রামিং হল একটি বড় এবং জটিল কাজকে অনেক ছোট কাজকে ভাগ করার একটি প্রক্রিয়া। মূলত একই প্রক্রিয়াটি এখানে ঘটছে: ডেটার বড় ব্লক পড়া এবং লেখাকে কামড়ের আকারের টুকরোগুলিতে পড়া এবং লেখার মধ্যে ভেঙে দেওয়া হয় - একবারে এক বাইট।

ডিস্কে একটি ফাইল অনুলিপি করতে আপনি কীভাবে এই ক্লাসগুলি ব্যবহার করতে পারেন তা এখানে:

ডিস্কে একটি ফাইল কপি করুন
public static void main(String[] args) throws Exception
{
 //Create a stream to read bytes from a file
 FileInputStream inputStream = new FileInputStream("c:/data.txt");
 //Create a stream to write bytes to a file
 FileOutputStream outputStream = new FileOutputStream("c:/result.txt");

 while (inputStream.available() > 0) //as long as there are unread bytes
 {
  int data = inputStream.read(); // Read the next byte into the data variable
  outputStream.write(data); // and write it to the second stream
 }

 inputStream.close(); //Close both streams. We don't need them any more.
 outputStream.close();
}

"ধন্যবাদ, ঋষি। আমি অবশেষে বুঝতে পেরেছি কিভাবে এই কোডটি কাজ করে।"