Random Access File (RAF) হল Java I/O প্যাকেজের একটি বিশেষ ক্লাস যা ফাইলের যেকোনো অংশে দ্রুত অ্যাক্সেস করার জন্য ব্যবহৃত হয়। এর মাধ্যমে ফাইলের নির্দিষ্ট অবস্থানে গিয়ে পড়া বা লেখা সম্ভব হয়, অর্থাৎ sequential access না করে direct access করা যায়। এই ক্ষমতা সাধারণত databases বা বড় ডেটা ফাইলগুলির জন্য প্রয়োজনীয় যেখানে শুধুমাত্র একটি নির্দিষ্ট অংশের পরিবর্তন করা হয় বা পড়া হয়।
RandomAccessFile ক্লাসটি File এবং Seekable Streams এর একটি সমন্বয় হিসেবে কাজ করে, যা আপনি যে অংশে ডেটা রাখতে চান বা পড়তে চান সেখানে file pointer স্থাপন করতে দেয়।
RandomAccessFile এর মূল বৈশিষ্ট্য:
- ফাইল পয়েন্টার পরিচালনা:
seek(long position)মেথড ব্যবহার করে ফাইল পয়েন্টারকে নির্দিষ্ট অবস্থানে স্থানান্তর করা যায়।- ফাইল পয়েন্টার ব্যবহার করে আপনি ফাইলের যে কোনও জায়গায় দ্রুতভাবে পড়তে বা লেখতে পারেন।
- File Modes:
- RandomAccessFile ক্লাস দুটি মোডে কাজ করতে পারে:
- "r": শুধুমাত্র পড়ার জন্য ফাইল খুলে।
- "rw": পড়ার পাশাপাশি লেখার জন্য ফাইল খুলে।
- "rwd": ফাইলের কন্টেন্ট এবং মেটাডেটা লেখার জন্য (read/write data)।
- "rws": ফাইলের কন্টেন্ট এবং মেটাডেটা লেখার জন্য (read/write data & synchronization).
- RandomAccessFile ক্লাস দুটি মোডে কাজ করতে পারে:
- Data Types:
- RandomAccessFile বিভিন্ন primitive types যেমন
byte,char,int,long,float,doubleএবং String ডেটা লেখার এবং পড়ার জন্যreadএবংwriteমেথড প্রদান করে।
- RandomAccessFile বিভিন্ন primitive types যেমন
RandomAccessFile এর মেথড:
| মেথড | বর্ণনা |
|---|---|
seek(long position) | ফাইল পয়েন্টারকে নির্দিষ্ট অবস্থানে স্থানান্তরিত করে। |
read() | ফাইল থেকে একটি বাইট পড়ে। |
readInt() | ফাইল থেকে একটি int পড়ে। |
write() | ফাইলে একটি বাইট লেখে। |
writeInt() | ফাইলে একটি int লেখে। |
getFilePointer() | ফাইল পয়েন্টারের বর্তমান অবস্থান রিটার্ন করে। |
length() | ফাইলের আকার (সাইজ) রিটার্ন করে। |
close() | ফাইল স্ট্রীমটি বন্ধ করে। |
RandomAccessFile উদাহরণ:
১. File Pointer ব্যবহার করে একটি ফাইল থেকে নির্দিষ্ট অংশে ডেটা পড়া এবং লেখা
import java.io.*;
public class RandomAccessFileExample {
public static void main(String[] args) {
// একটি নতুন ফাইল তৈরি এবং লেখা
try (RandomAccessFile file = new RandomAccessFile("example.dat", "rw")) {
// প্রথমে কিছু ডেটা লিখুন
file.writeInt(123); // int লিখুন
file.writeDouble(3.14); // double লিখুন
file.writeUTF("Hello, Random Access!"); // String লিখুন
// ফাইল পয়েন্টারকে প্রথম অবস্থানে নিয়ে যান
file.seek(0);
// প্রথমে লেখা ডেটা পড়ুন
int intValue = file.readInt(); // int পড়ুন
double doubleValue = file.readDouble(); // double পড়ুন
String stringValue = file.readUTF(); // String পড়ুন
// পড়া ডেটা প্রিন্ট করুন
System.out.println("Integer: " + intValue);
System.out.println("Double: " + doubleValue);
System.out.println("String: " + stringValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- প্রথমে ফাইলের মধ্যে একটি
int,double, এবং একটিStringলিখা হচ্ছে। - তারপর
seek()মেথড ব্যবহার করে ফাইল পয়েন্টারকে প্রথম অবস্থানে নিয়ে যাওয়া হচ্ছে। - পরবর্তীতে সেই অবস্থান থেকে
readInt(),readDouble(), এবংreadUTF()মেথড ব্যবহার করে ডেটা পড়া হচ্ছে।
আউটপুট:
Integer: 123
Double: 3.14
String: Hello, Random Access!
২. File Pointer এর অবস্থান চেক করা এবং ফাইলের সাইজ পাওয়া
import java.io.*;
public class FilePointerExample {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.dat", "rw")) {
// কিছু ডেটা লিখুন
file.writeInt(42);
file.writeUTF("Random Access Example");
// ফাইল পয়েন্টারের বর্তমান অবস্থান পেতে
long currentPointer = file.getFilePointer();
System.out.println("Current File Pointer Position: " + currentPointer);
// ফাইলের আকার পেতে
long fileLength = file.length();
System.out.println("File Length: " + fileLength);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
getFilePointer()মেথড দ্বারা ফাইল পয়েন্টারের বর্তমান অবস্থান পাওয়া যাচ্ছে।length()মেথড দ্বারা ফাইলের মোট আকার পাওয়া যাচ্ছে।
আউটপুট:
Current File Pointer Position: 14
File Length: 36
৩. RandomAccessFile এর মাধ্যমে নির্দিষ্ট অবস্থানে ডেটা লেখা
import java.io.*;
public class RandomAccessFileWriteExample {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.dat", "rw")) {
// প্রথমে কিছু ডেটা লিখুন
file.writeUTF("Hello");
file.writeInt(100);
// ফাইল পয়েন্টারকে দ্বিতীয় অবস্থানে নিয়ে যান
file.seek(0); // প্রথমে "Hello" লেখার পরে পয়েন্টার থাকবে 5 তম অবস্থানে
// আবার নতুন ডেটা লিখুন
file.writeUTF("Java"); // পয়েন্টার অবস্থান পরিবর্তন হয়ে "Hello" এর উপরে লেখা হবে
// ফাইল পয়েন্টারকে পরবর্তী অবস্থানে নিয়ে যান
file.seek(5);
int value = file.readInt(); // দ্বিতীয় অবস্থানে থাকা `100` পড়ুন
System.out.println("File Data at position 5: " + value); // `100` দেখাবে
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- ফাইল পয়েন্টারকে
seek(0)দিয়ে প্রথম অবস্থানে নিয়ে যাওয়া হচ্ছে। - তারপর
writeUTF()মেথড ব্যবহার করে ফাইলের উপরে নতুন ডেটা লেখা হচ্ছে। seek()মেথডের মাধ্যমে ফাইল পয়েন্টারকে অন্য স্থানে নিয়ে গিয়ে পুরনো ডেটার উপরে নতুন ডেটা লেখা হচ্ছে।
আউটপুট:
File Data at position 5: 100
RandomAccessFile এর সুবিধা:
- Fast and Direct Access:
- এটি একটি direct access স্ট্রীম, যা নির্দিষ্ট অবস্থানে দ্রুতভাবে পড়া এবং লেখা সম্ভব করে।
- Seekable Streams:
- seek() মেথডের মাধ্যমে যেকোনো অবস্থানে directly অ্যাক্সেস করা যায়।
- Multiple Data Types Handling:
- RandomAccessFile বিভিন্ন primitive types যেমন
int,long,char,float,double,Stringইত্যাদি হ্যান্ডল করতে সক্ষম।
- RandomAccessFile বিভিন্ন primitive types যেমন
- Efficient for Databases:
- RandomAccessFile ডাটাবেসের মতো অ্যাপ্লিকেশনগুলিতে উপকারী যেখানে নির্দিষ্ট ডেটার অংশে দ্রুত অ্যাক্সেস করা প্রয়োজন।
- RandomAccessFile একটি শক্তিশালী ক্লাস যা File Pointer পরিচালনা করতে সহায়ক এবং দ্রুত random access প্রদান করে। এটি ফাইলের যেকোনো অংশে দ্রুতভাবে ডেটা পড়া এবং লেখা সম্ভব করে।
- seek() মেথড ব্যবহার করে ফাইল পয়েন্টারকে নিয়ন্ত্রণ করা যায়, যা সাধারণ স্ট্রীমের তুলনায় অনেক দ্রুত এবং কার্যকর।
- এটি database এবং large files এর সাথে কাজ করার জন্য আদর্শ যেখানে direct access দরকার।
RandomAccessFile Java I/O এর একটি গুরুত্বপূর্ণ উপাদান, যা ফাইলের নির্দিষ্ট অংশে অ্যাক্সেস করার ক্ষমতা প্রদান করে।
Read more