FileReader এবং FileWriter হল Java I/O সিস্টেমের ক্লাস যা Character Streams পরিচালনা করে। এগুলি প্রধানত টেক্সট ডেটা পড়া এবং লেখার জন্য ব্যবহৃত হয়। FileReader ফাইল থেকে ক্যারেক্টার আকারে ডেটা পড়ে, এবং FileWriter ফাইলে ক্যারেক্টার আকারে ডেটা লেখে।
FileReader এবং FileWriter এর ভূমিকা
- FileReader:
- Character Streams এর অংশ, যা ফাইল থেকে টেক্সট (ক্যারেক্টার) পড়তে ব্যবহৃত হয়।
- এটি বাইনারি ডেটার পরিবর্তে টেক্সট ডেটা পড়ার জন্য উপযুক্ত।
- FileWriter:
- Character Streams এর অংশ, যা ফাইলে টেক্সট (ক্যারেক্টার) লেখার জন্য ব্যবহৃত হয়।
- এটি FileOutputStream এর মতো ফাইলের বাইনারি ডেটা লেখার পরিবর্তে টেক্সট ডেটা লেখে।
FileReader এবং FileWriter এর মেথড:
FileReader
int read(): ফাইল থেকে একটি ক্যারেক্টার পড়ে।int read(char[] cbuf): একটি ক্যারেক্টার অ্যারে থেকে ডেটা পড়ে।void close(): স্ট্রিম বন্ধ করে।
FileWriter
void write(int c): একটি ক্যারেক্টার লেখে।void write(char[] cbuf): একটি ক্যারেক্টার অ্যারে লেখে।void close(): স্ট্রিম বন্ধ করে।
FileReader এবং FileWriter এর উদাহরণ
১. ফাইল থেকে টেক্সট পড়া (FileReader ব্যবহার করে)
import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
try (FileReader fr = new FileReader("input.txt")) {
int charData;
while ((charData = fr.read()) != -1) { // ফাইল থেকে একটি ক্যারেক্টার পড়া
System.out.print((char) charData); // ক্যারেক্টার আউটপুট
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ফলস্বরূপ:
- input.txt ফাইলের সমস্ত টেক্সট ক্যারেক্টার আকারে পড়া হবে এবং কনসোলে প্রিন্ট হবে।
২. টেক্সট ফাইলে ডেটা লেখা (FileWriter ব্যবহার করে)
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String[] args) {
String data = "This is a test output.";
try (FileWriter fw = new FileWriter("output.txt")) {
fw.write(data); // String থেকে ডেটা ফাইলে লেখা
System.out.println("Data written to file successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ফলস্বরূপ:
- output.txt ফাইলে "This is a test output." লেখা হবে।
৩. FileReader এবং FileWriter ব্যবহার করে ফাইল কপি করা
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileCopyExample {
public static void main(String[] args) {
try (FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")) {
int charData;
while ((charData = fr.read()) != -1) { // ফাইল থেকে একটি ক্যারেক্টার পড়া
fw.write(charData); // ফাইলে লেখা
}
System.out.println("File copied successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ফলস্বরূপ:
- input.txt ফাইলের সমস্ত কন্টেন্ট output.txt ফাইলে কপি করা হবে।
FileReader এবং FileWriter এর সুবিধা এবং সীমাবদ্ধতা
সুবিধা:
- Text Data Handling: FileReader এবং FileWriter বিশেষভাবে টেক্সট ডেটা পড়া এবং লেখার জন্য ডিজাইন করা হয়েছে।
- Character Stream: এটি Character Streams ব্যবহার করে ডেটা পড়ে এবং লেখে, যা Byte Streams (যেমন
FileInputStream,FileOutputStream) এর তুলনায় টেক্সট ফাইলের জন্য আরো উপযুক্ত। - Buffered Support: BufferedReader এবং BufferedWriter ক্লাসের সাথে ব্যবহারের মাধ্যমে দ্রুত ডেটা প্রসেসিং সম্ভব।
সীমাবদ্ধতা:
- Only Text Files: FileReader এবং FileWriter শুধুমাত্র টেক্সট ডেটা পড়ে এবং লেখে, বাইনারি ফাইলের জন্য এগুলো উপযুক্ত নয়।
- Character Encoding: ফাইলের character encoding সঠিকভাবে পরিচালনা করা দরকার, অন্যথায় এটি মাল্টি-বাইট ডেটার ক্ষেত্রে সমস্যা সৃষ্টি করতে পারে।
- Error Handling: কিছু সময় বড় ফাইলের ক্ষেত্রে, বিশেষ করে যেখানে ইনপুট বা আউটপুট অপারেশন ধীর হতে পারে, সেখানে উপযুক্ত Error Handling প্রয়োজন।
Java Tuples এর সাথে FileReader এবং FileWriter এর ব্যবহার
Java Tuples ব্যবহার করে আমরা ফাইলের বিভিন্ন প্রপার্টি যেমন নাম, আকার, এবং ফাইলের কন্টেন্ট সংরক্ষণ করতে পারি। উদাহরণস্বরূপ, আমরা একটি Tuple ব্যবহার করে ফাইলের নাম এবং তার আকার বা কন্টেন্ট একত্রে সংগ্রহ করতে পারি।
কোড উদাহরণ: FileReader এবং FileWriter এর সাথে Tuple ব্যবহার
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.commons.lang3.tuple.Pair;
public class FileWithTuple {
public static void main(String[] args) {
String inputFile = "input.txt";
Pair<String, String> fileInfo = readFileAndReturnInfo(inputFile);
System.out.println("File Name: " + fileInfo.getLeft());
System.out.println("File Content: " + fileInfo.getRight());
// Write the content to another file
writeFile("output.txt", fileInfo.getRight());
}
public static Pair<String, String> readFileAndReturnInfo(String filePath) {
StringBuilder content = new StringBuilder();
try (FileReader fr = new FileReader(filePath)) {
int charData;
while ((charData = fr.read()) != -1) {
content.append((char) charData); // Add each character to StringBuilder
}
} catch (IOException e) {
e.printStackTrace();
}
return Pair.of(filePath, content.toString()); // Return file name and content
}
public static void writeFile(String outputFilePath, String content) {
try (FileWriter fw = new FileWriter(outputFilePath)) {
fw.write(content); // Write content to the output file
System.out.println("Data written to " + outputFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ফলস্বরূপ:
- input.txt ফাইলের নাম এবং কন্টেন্ট Tuple এর মাধ্যমে একত্রে সংগ্রহ করা হবে।
- output.txt ফাইলে কন্টেন্ট লেখার পর, ফাইল কপি হবে।
- FileReader এবং FileWriter ক্লাসগুলি Character Streams ক্লাস, যা টেক্সট ডেটা পড়া এবং লেখার জন্য ব্যবহৃত হয়।
- FileReader বাইনারি ডেটা পড়ার জন্য FileInputStream এর বিকল্প এবং FileWriter বাইনারি ডেটা লেখার জন্য FileOutputStream এর বিকল্প।
- Java Tuples ব্যবহার করে ফাইলের নাম এবং কন্টেন্ট একত্রে সংগ্রহ এবং পরিচালনা করা যেতে পারে।
এই ক্লাসগুলো ফাইলের টেক্সট ডেটা পরিচালনার জন্য কার্যকর এবং দ্রুতভাবে ফাইল কপি এবং ম্যানিপুলেশন করার জন্য আদর্শ।
Read more