RandomAccessFile হল Java I/O প্যাকেজের একটি ক্লাস, যা ফাইলের মধ্যে ডেটা র্যান্ডম অ্যাক্সেস করতে সহায়ক। এর মাধ্যমে আপনি একটি ফাইলে নির্দিষ্ট অবস্থানে সরাসরি পৌঁছাতে পারেন এবং সেখানে পড়তে বা লিখতে পারেন। এটি FileInputStream এবং FileOutputStream এর তুলনায় অনেক বেশি সুবিধাজনক, কারণ এতে আপনি ফাইলের যে কোনো পজিশন থেকে ডেটা পড়তে এবং লিখতে পারেন।
এটি নন-সিকোয়েন্সিয়াল অ্যাক্সেস ফাইলের জন্য ব্যবহৃত হয়, যা ফাইলের মধ্যে একটি নির্দিষ্ট স্থানে রিড/রাইট করার অনুমতি দেয়।
RandomAccessFile এর ধারণা:
- Random Access:
- RandomAccessFile ক্লাসের সবচেয়ে বড় বৈশিষ্ট্য হল এটি random access ফাইল অ্যাক্সেসের সুবিধা দেয়। আপনি ফাইলের শুরু থেকে শেষ পর্যন্ত শুধুমাত্র ধারাবাহিকভাবে পড়া বা লেখা করতে পারবেন না, বরং আপনি ফাইলের যেকোনো স্থানে সরাসরি পৌঁছাতে পারবেন।
- Reading and Writing:
- আপনি
read()এবংwrite()মেথড ব্যবহার করে ফাইলের মধ্যে ডেটা পড়া এবং লেখা করতে পারেন।
- আপনি
- File Pointer:
- RandomAccessFile একটি file pointer ব্যবহার করে, যা
seek()মেথড দ্বারা অবস্থান পরিবর্তন করতে পারে। ফাইলের যেখানে আপনি চান সেখান থেকে ডেটা পড়া বা লেখা সম্ভব।
- RandomAccessFile একটি file pointer ব্যবহার করে, যা
- Both Read and Write:
- এটি ফাইলের পড়তে এবং লিখতে উভয় কাজই করতে সক্ষম, অন্যথায় FileInputStream এবং FileOutputStream শুধুমাত্র একদিকে কাজ করে।
RandomAccessFile এর প্রধান মেথড:
| মেথড | বর্ণনা |
|---|---|
| read() | ফাইল থেকে একটি বাইট পড়ে। |
| readFully(byte[] b) | পুরো বাফারটি ফাইল থেকে পড়ে। |
| write(int b) | একটি বাইট ফাইলে লেখে। |
| write(byte[] b) | একটি বাফার ফাইলে লেখে। |
| seek(long pos) | ফাইল পয়েন্টারকে একটি নির্দিষ্ট অবস্থানে নিয়ে যায়। |
| getFilePointer() | বর্তমানে ফাইল পয়েন্টার কোথায় অবস্থান করছে তা রিটার্ন করে। |
| length() | ফাইলের মোট আকার (বাইটে) রিটার্ন করে। |
| close() | ফাইল বন্ধ করে। |
RandomAccessFile এর উদাহরণ
১. ফাইল থেকে ডেটা পড়া এবং লিখা (RandomAccessFile এর মাধ্যমে)
import java.io.*;
public class RandomAccessFileExample {
public static void main(String[] args) {
// ফাইল অবজেক্ট তৈরি
File file = new File("example.dat");
try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
// প্রথমে কিছু ডেটা লেখা
raf.writeUTF("Hello, Java!");
raf.writeInt(12345);
// ফাইলের পয়েন্টার প্রথমে ফিরিয়ে আনা
raf.seek(0);
// ফাইল থেকে ডেটা পড়া
String str = raf.readUTF();
int number = raf.readInt();
System.out.println("Read from file: " + str);
System.out.println("Read from file: " + number);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- প্রথমে
RandomAccessFileব্যবহার করে একটি ফাইলেwriteUTF()এবংwriteInt()মেথড ব্যবহার করে ডেটা লেখা হয়েছে। - পরে
seek(0)মেথড দিয়ে ফাইল পয়েন্টারকে প্রথমে ফিরিয়ে আনা হয়েছে, যাতে ফাইল থেকে প্রথমে ডেটা পড়া যায়। - পরে
readUTF()এবংreadInt()মেথড ব্যবহার করে ফাইল থেকে ডেটা পড়া হয়েছে।
আউটপুট:
Read from file: Hello, Java!
Read from file: 12345
২. RandomAccessFile দিয়ে নির্দিষ্ট স্থানে ডেটা লেখা
import java.io.*;
public class RandomAccessFileWriteExample {
public static void main(String[] args) {
try (RandomAccessFile raf = new RandomAccessFile("example.dat", "rw")) {
// ফাইলের মধ্যে নির্দিষ্ট পজিশনে ডেটা লেখা
raf.seek(10); // পয়েন্টারকে 10 তম বাইটে নিয়ে যাওয়া
raf.writeUTF("New Data at position 10");
System.out.println("Data written at position 10.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
seek(10)মেথড দিয়ে ফাইল পয়েন্টারকে ১০ তম বাইটে নিয়ে যাওয়া হয়েছে এবং এরপর সেই স্থানে ডেটা লেখা হয়েছে।
RandomAccessFile এর প্রয়োজনীয়তা:
- Random Access:
- RandomAccessFile একটি র্যান্ডম অ্যাক্সেস ফাইল স্ট্রিম, যার মাধ্যমে ফাইলের যে কোনো পজিশনে সরাসরি পৌঁছানো যায়, এবং সেখানে ডেটা পড়া বা লেখা যায়। এটি সিকোয়েন্সিয়াল ফাইল অ্যাক্সেসের তুলনায় অনেক বেশি কার্যকরী।
- Multiple Read and Write Operations:
- আপনি একটি ফাইলে একাধিক পজিশনে ডেটা পড়তে এবং লেখতে পারেন, যা ফাইলের মধ্যে বিভিন্ন ধরনের তথ্য ম্যানিপুলেট করার জন্য উপকারী।
- Efficient for Large Files:
- বড় ফাইলগুলি পড়ার এবং লেখার জন্য RandomAccessFile উপযুক্ত, কারণ এটি ফাইলের মধ্যে যে কোনো পজিশনে ডেটা অ্যাক্সেস করতে পারে, যা সময় এবং মেমরি খরচ কমায়।
- Improved File Manipulation:
- ফাইলের কিছু অংশ পড়া বা লেখা করার সময় অন্যান্য অংশের প্রভাব না ফেললে RandomAccessFile খুব কার্যকরী। এটি ডেটার নির্দিষ্ট অংশগুলিতে সরাসরি অ্যাক্সেসের সুবিধা দেয়।
- File Pointer Control:
- seek() মেথড ব্যবহার করে আপনি ফাইলের যে কোনও স্থানে চলে যেতে পারেন এবং সেখান থেকে ডেটা পড়তে বা লিখতে পারেন। এই সুবিধা সিকোয়েন্সিয়াল FileInputStream এবং FileOutputStream-এর তুলনায় অনেক বেশি সুবিধাজনক।
- RandomAccessFile ক্লাস Java-তে ফাইল অ্যাক্সেস এবং ফাইল ম্যানিপুলেশন এর জন্য খুবই শক্তিশালী এবং কার্যকরী একটি টুল।
- এটি r (read), w (write), এবং rw (read-write) মোডে কাজ করতে পারে।
- seek() মেথডের মাধ্যমে ফাইলের যেকোনো স্থানে সরাসরি পৌঁছানো সম্ভব, যা sequential access থেকে অনেক বেশি কার্যকরী।
- এটি large files-এ কার্যকরী এবং file pointer manipulation এর মাধ্যমে ডেটা প্রসেস করা সহজ করে তোলে।
RandomAccessFile ক্লাসের মাধ্যমে ফাইলের নির্দিষ্ট অংশ পড়া বা লেখা সম্ভব, যা অনেক ধরনের I/O অপারেশনে সাহায্য করে, বিশেষ করে যখন large-scale file manipulation করতে হয়।
Read more