Java I/O (Input/Output) সিস্টেমে ফাইল হ্যান্ডলিংয়ের জন্য বিভিন্ন ক্লাস রয়েছে, এর মধ্যে দুটি গুরুত্বপূর্ণ ক্লাস হলো FileInputStream এবং FileOutputStream। এই দুটি ক্লাস মূলত byte streams এর অংশ, যা binary data (যেমন ইমেজ, অডিও, ভিডিও ফাইল) পড়তে এবং লিখতে ব্যবহৃত হয়।
FileInputStream এবং FileOutputStream এর মূল বৈশিষ্ট্য
FileInputStream: এই ক্লাস ফাইল থেকে বাইনারি ডেটা পড়ার জন্য ব্যবহৃত হয়।FileOutputStream: এই ক্লাস ফাইলে বাইনারি ডেটা লেখার জন্য ব্যবহৃত হয়।
এগুলি মূলত ফাইলের মধ্যে ডেটা পাঠানোর (output) এবং ডেটা গ্রহণ করার (input) জন্য ব্যবহৃত হয়।
FileInputStream এর ধারণা
FileInputStream একটি ক্লাস যা একটি ফাইল থেকে বাইনারি ডেটা পড়ার জন্য ব্যবহৃত হয়। এটি byte-by-byte ডেটা পড়ে, যা বাইট ডেটা প্রসেসিংয়ের জন্য খুবই কার্যকর।
গুরুত্বপূর্ণ মেথডসমূহ:
read(): ফাইল থেকে এক বাইট পড়ে এবং সেই বাইটটি রিটার্ন করে।read(byte[] b): একটি বাইট অ্যারে দিয়ে ডেটা পড়ে এবং অ্যারে তে লিখে।close(): ফাইল স্ট্রিম বন্ধ করে।
উদাহরণ:
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("example.txt")) {
int byteData;
while ((byteData = fis.read()) != -1) {
System.out.print((char) byteData); // পড়া ডেটা প্রিন্ট করা
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট:
This is a test file.
এই উদাহরণে, FileInputStream একটি ফাইল থেকে বাইনারি ডেটা পড়ছে এবং read() মেথডের মাধ্যমে একেকটি বাইট পড়ে সেই বাইটটিকে char এ রূপান্তরিত করে কনসোল এ প্রদর্শন করছে।
FileOutputStream এর ধারণা
FileOutputStream একটি ক্লাস যা ফাইলে বাইনারি ডেটা লেখার জন্য ব্যবহৃত হয়। এটি byte-by-byte ডেটা লেখে এবং সাধারণত ফাইলের মধ্যে বাইনারি ডেটা যেমন ছবি, ভিডিও, ইত্যাদি লেখার জন্য ব্যবহৃত হয়।
গুরুত্বপূর্ণ মেথডসমূহ:
write(int b): একটি একক বাইট লেখে।write(byte[] b): একটি বাইট অ্যারে লেখে।close(): ফাইল স্ট্রিম বন্ধ করে।
উদাহরণ:
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
String data = "Hello, World!";
fos.write(data.getBytes()); // String কে byte array তে রূপান্তরিত করে ফাইলে লেখে।
System.out.println("Data written to file.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট:
Data written to file.
এই উদাহরণে, FileOutputStream একটি ফাইলে বাইনারি ডেটা (এখানে স্ট্রিং) লিখছে এবং getBytes() মেথডের মাধ্যমে স্ট্রিংটিকে বাইনারি ফরম্যাটে রূপান্তরিত করে ফাইলে লিখছে।
Byte Streams এবং FileInputStream/FileOutputStream এর সুবিধা
- Binary Data Handling:
FileInputStreamএবংFileOutputStreamবাইনারি ডেটা পড়া এবং লেখা সাপোর্ট করে, যা ইমেজ, ভিডিও বা অন্য মিডিয়া ফাইলগুলির জন্য খুবই উপকারী। - Efficient for Small Data: Byte streams সাধারণত ছোট ডেটা সাইজের জন্য উপযুক্ত এবং কার্যকর।
- Low-Level I/O: Byte streams খুবই নিচু স্তরের I/O অপারেশন পরিচালনা করে, যা কম্পিউটেশনালভাবে সহজ।
Byte Streams এর Limitations
- Character Data Handling: Byte Streams শুধুমাত্র বাইনারি ডেটা সরবরাহ করতে সক্ষম, এবং character encoding পরিচালনা করতে পারে না। টেক্সট ডেটা পড়ার জন্য Character Streams ব্যবহার করা উচিত।
- Performance Overhead: ছোট ফাইলের জন্য Byte Streams কার্যকর হলেও বড় ফাইল বা উচ্চ পারফরম্যান্স ডেটা ট্রান্সফারের জন্য Buffered Streams বা NIO ব্যবহার করা ভালো।
FileInputStream এবং FileOutputStream এর মাধ্যমে Java Tuples ব্যবহার
Java Tuples ব্যবহার করে FileInputStream এবং FileOutputStream এর মাধ্যমে ডেটা পরিচালনা করা সহজ। একটি Tuple তৈরি করে আমরা ফাইলের নাম এবং আকার একত্রে সংরক্ষণ করতে পারি।
উদাহরণ:
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.lang3.tuple.Pair;
public class FileTupleExample {
public static void main(String[] args) {
// File নাম এবং আকার সংরক্ষণ Tuple এ
Pair<String, Long> fileInfo = getFileInfo("example.txt");
// ফাইলের নাম এবং আকার প্রদর্শন
System.out.println("File Name: " + fileInfo.getLeft());
System.out.println("File Size: " + fileInfo.getRight() + " bytes");
}
public static Pair<String, Long> getFileInfo(String fileName) {
FileInputStream fis = null;
long size = 0;
try {
fis = new FileInputStream(fileName);
size = fis.available(); // ফাইলের আকার নির্ধারণ
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return Pair.of(fileName, size);
}
}
আউটপুট:
File Name: example.txt
File Size: 123 bytes
এই উদাহরণে, Pair টাপল ব্যবহার করা হয়েছে ফাইলের নাম এবং আকার সংরক্ষণ করতে, এবং FileInputStream ব্যবহার করে ফাইলের আকার পঠিত হয়েছে।
FileInputStreamএবংFileOutputStreamমূলত Byte Streams এর অংশ এবং বাইনারি ডেটা পড়া ও লেখা করার জন্য ব্যবহৃত হয়।- Byte Streams ছোট ফাইল এবং বাইনারি ডেটা ব্যবস্থাপনার জন্য উপযোগী, কিন্তু Character Streams টেক্সট ডেটার জন্য আরও কার্যকর।
- Java Tuples (যেমন
Pair) ব্যবহার করে ফাইল সম্পর্কিত তথ্য (যেমন নাম এবং আকার) একত্রে সংরক্ষণ এবং হ্যান্ডল করা সহজ এবং কার্যকর হতে পারে।
Read more