FileInputStream এবং FileOutputStream দুটি ক্লাস Java I/O (Input/Output) API-এর অংশ, যা ফাইল থেকে ডেটা পড়া এবং ফাইলে ডেটা লেখা সংক্রান্ত অপারেশন সম্পাদন করতে ব্যবহৃত হয়। এগুলি বাইনারি ফাইলের সাথে কাজ করতে ব্যবহৃত হয়, যেমন ইমেজ, অডিও ফাইল, ভিডিও ফাইল ইত্যাদি।
1. FileInputStream
FileInputStream ক্লাস ব্যবহার করে ফাইল থেকে ডেটা পড়া হয়। এটি InputStream ক্লাসের একটি সাবক্লাস এবং byte-oriented। এটি ফাইলের একটি বা একাধিক বাইট পড়তে ব্যবহৃত হয়।
উদাহরণ: FileInputStream দিয়ে ফাইল থেকে ডেটা পড়া
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
public static void main(String[] args) {
FileInputStream fis = null;
try {
// ফাইল থেকে ডেটা পড়ার জন্য FileInputStream অবজেক্ট তৈরি
fis = new FileInputStream("input.txt");
int byteData;
// ফাইলের প্রতিটি বাইট পড়া হচ্ছে
while ((byteData = fis.read()) != -1) {
System.out.print((char) byteData); // বাইট থেকে চরিত্রে রূপান্তর
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close(); // ফাইল স্ট্রিম বন্ধ করা হচ্ছে
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2. FileOutputStream
FileOutputStream ক্লাস ব্যবহার করে ফাইলে ডেটা লেখা হয়। এটি OutputStream ক্লাসের একটি সাবক্লাস এবং byte-oriented। এটি একটি ফাইলের মধ্যে বাইনারি ডেটা লেখার জন্য ব্যবহৃত হয়।
উদাহরণ: FileOutputStream দিয়ে ফাইলে ডেটা লেখা
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamExample {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
// ফাইলে ডেটা লেখার জন্য FileOutputStream অবজেক্ট তৈরি
fos = new FileOutputStream("output.txt");
String content = "Hello, this is a test file.";
byte[] contentBytes = content.getBytes(); // স্ট্রিংকে বাইট অ্যারে তে রূপান্তর
// বাইট অ্যারে ফাইলে লেখা হচ্ছে
fos.write(contentBytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close(); // ফাইল স্ট্রিম বন্ধ করা হচ্ছে
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3. FileInputStream এবং FileOutputStream এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | FileInputStream | FileOutputStream |
|---|---|---|
| মূল উদ্দেশ্য | ফাইল থেকে ডেটা পড়া | ফাইলে ডেটা লেখা |
| মেথড | read(), available(), close() | write(), flush(), close() |
| ডেটা টাইপ | বাইনারি ডেটা (byte-oriented) | বাইনারি ডেটা (byte-oriented) |
| ব্যবহার | ফাইল থেকে এক বা একাধিক বাইট পড়তে ব্যবহৃত | ফাইলে এক বা একাধিক বাইট লেখার জন্য ব্যবহৃত |
4. ফাইল ম্যানিপুলেশন সংক্রান্ত কিছু গুরুত্বপূর্ণ বিষয়
a. ফাইলের শেষে লেখা (Appending)
FileOutputStream দ্বারা যদি ডেটা লেখার সময় আপনি ফাইলের শেষের দিকে নতুন ডেটা যুক্ত করতে চান, তবে আপনি FileOutputStream এর কনস্ট্রাক্টর FileOutputStream(String name, boolean append) ব্যবহার করতে পারেন যেখানে append পারামিটারকে true দিলে ফাইলের শেষে ডেটা লেখা হবে।
FileOutputStream fos = new FileOutputStream("output.txt", true); // Append mode
b. ব্যাচে ডেটা লেখা
আপনি একাধিক বাইট একবারে লেখার জন্য write(byte[] b) মেথড ব্যবহার করতে পারেন। এটি একটি বাইট অ্যারে গ্রহণ করে এবং তা ফাইলে লেখে।
byte[] byteArray = {65, 66, 67}; // A, B, C
fos.write(byteArray);
c. ফাইলের দৈর্ঘ্য পরীক্ষা করা
আপনি FileInputStream এর মাধ্যমে ফাইলের দৈর্ঘ্য পরীক্ষা করতে পারেন available() মেথড ব্যবহার করে যা অবজেক্টের মধ্যে কতগুলি বাইট এখনও পড়া বাকি আছে তা বলে দেয়।
int fileLength = fis.available(); // ফাইলের বাকি ডেটার দৈর্ঘ্য
d. ফাইল ক্লোজিং
FileInputStream এবং FileOutputStream ব্যবহারের পরে তাদের বন্ধ করা অত্যন্ত গুরুত্বপূর্ণ। যদি আপনি স্ট্রিম বন্ধ না করেন, তাহলে এটি ফাইলের লকিং বা মেমরি লিক সৃষ্টি করতে পারে। তাই সবসময় close() মেথড ব্যবহার করে স্ট্রিম বন্ধ করুন।
fis.close(); // ফাইল ইনপুট স্ট্রিম বন্ধ
fos.close(); // ফাইল আউটপুট স্ট্রিম বন্ধ
5. Exception Handling
FileInputStream এবং FileOutputStream এর মাধ্যমে কাজ করার সময় IOException বা FileNotFoundException এর মতো এক্সসেপশন হতে পারে। তাই এগুলিকে যথাযথভাবে হ্যান্ডলিং করা জরুরি।
try {
// ফাইল ম্যানিপুলেশন কোড
} catch (FileNotFoundException e) {
System.out.println("ফাইল পাওয়া যায়নি: " + e.getMessage());
} catch (IOException e) {
System.out.println("I/O ত্রুটি: " + e.getMessage());
}
FileInputStream এবং FileOutputStream Java I/O API এর মৌলিক ক্লাস, যেগুলি ফাইল ম্যানিপুলেশনের জন্য ব্যবহৃত হয়। এগুলি বাইনারি ফাইল ম্যানিপুলেশনের জন্য খুবই কার্যকরী এবং সহজ। তবে, ফাইল হ্যান্ডলিং করার সময় এক্সসেপশন হ্যান্ডলিং, ফাইল স্ট্রিম ক্লোজিং, এবং অন্যান্য নিরাপত্তামূলক ব্যবস্থাগুলি বজায় রাখা অত্যন্ত গুরুত্বপূর্ণ।
Read more