Random Access এর মাধ্যমে File Pointer পরিচালনা করা

RandomAccessFile Class - জাভা টাপল (Java Tuples) - Java Technologies

377

Random Access File হল এমন একটি ফাইল যা একে একে বাইট বা রেকর্ডের মাধ্যমে পড়া এবং লেখা যায়, অর্থাৎ আপনি যে কোনো স্থান থেকে ডেটা পড়তে এবং লিখতে পারেন। RandomAccessFile ক্লাস জাভায় java.io প্যাকেজের অংশ এবং এটি ফাইলের যে কোনো স্থানে ডেটা অ্যাক্সেস করতে সাহায্য করে।

RandomAccessFile ব্যবহার করে আপনি ফাইলের পয়েন্টার সরাতে পারেন এবং নির্দিষ্ট অবস্থান থেকে ডেটা পড়তে বা লিখতে পারেন। এটি ফাইল হ্যান্ডলিংয়ের আরও উন্নত পদ্ধতি যেখানে direct access এবং update এর প্রয়োজন হয়।


Random Access File এর বৈশিষ্ট্য

  1. ফাইল পয়েন্টার নিয়ন্ত্রণ: RandomAccessFile ক্লাসের মাধ্যমে ফাইল পয়েন্টারকে নির্দিষ্ট অবস্থানে স্থানান্তর করা যায়।
  2. দ্রুত পড়া ও লেখা: এটি ফাইলের মধ্যে নির্দিষ্ট অবস্থানে দ্রুতভাবে ডেটা পড়া এবং লেখা সম্ভব করে।
  3. ফাইলের মাঝে ডেটা অ্যাক্সেস: আপনি seek() মেথড ব্যবহার করে পয়েন্টারকে ফাইলের যেকোনো স্থানে স্থানান্তর করতে পারেন এবং তারপরে ডেটা পড়তে বা লিখতে পারেন।
  4. দ্বৈত মোডে কাজ: RandomAccessFile ফাইলকে read-write অথবা read-only মোডে খোলার অনুমতি দেয়।

RandomAccessFile ক্লাসের প্রধান মেথড

মেথডব্যাখ্যা
seek(long pos)ফাইল পয়েন্টার নির্দিষ্ট অবস্থানে স্থানান্তর করে
read()এক বাইট পড়ে
readInt()একটি পূর্ণসংখ্যা (int) পড়ে
write(int b)একটি বাইট লেখে
writeInt(int v)একটি পূর্ণসংখ্যা (int) লেখে
getFilePointer()বর্তমান পয়েন্টারের অবস্থান রিটার্ন করে
length()ফাইলের দৈর্ঘ্য রিটার্ন করে

RandomAccessFile ব্যবহার করার উদাহরণ

ফাইল থেকে ডেটা পড়া এবং লিখা

import java.io.RandomAccessFile;
import java.io.IOException;

public class RandomAccessFileExample {
    public static void main(String[] args) {
        String filePath = "randomAccessExample.txt";

        // ফাইল তৈরি এবং লিখা
        try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
            // ফাইলের শুরুতে ডেটা লেখা
            file.writeUTF("Hello, World!");
            file.writeInt(12345);
            file.writeDouble(99.99);

            // ফাইল পয়েন্টারকে প্রথমে নিয়ে যাওয়া
            file.seek(0);
            
            // প্রথম ডেটা পড়া
            String str = file.readUTF();
            int num = file.readInt();
            double d = file.readDouble();

            // পড়া ডেটা প্রদর্শন
            System.out.println("String: " + str);
            System.out.println("Integer: " + num);
            System.out.println("Double: " + d);

            // ফাইলের মধ্যে নির্দিষ্ট স্থানে লেখার জন্য পয়েন্টার স্থানান্তর করা
            file.seek(0);  // প্রথমে ফিরে যেতে
            file.writeUTF("Updated Data!");

            // আপডেটেড ডেটা পড়া
            file.seek(0);
            str = file.readUTF();
            System.out.println("Updated String: " + str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • seek(long pos) মেথডটি ব্যবহার করে ফাইলের পয়েন্টার নির্দিষ্ট অবস্থানে সেট করা হয়েছে।
  • writeUTF() এবং writeInt() মেথড ব্যবহার করে ডেটা লিখা হয়েছে এবং readUTF()readInt() মেথড ব্যবহার করে ডেটা পড়া হয়েছে।
  • seek() মেথডের মাধ্যমে ফাইলের পয়েন্টার পুনরায় অবস্থান পরিবর্তন করা হয়েছে, যা ফাইলের নির্দিষ্ট স্থানে পৌঁছাতে সাহায্য করে।

Random Access File এর সাথে Tuples ব্যবহার

যেহেতু Tuples বিভিন্ন ডেটা টাইপ একত্রে সংরক্ষণ করতে সহায়ক, তাই RandomAccessFile এর মাধ্যমে ডেটা পড়ে Tuples এ সংরক্ষণ করা যেতে পারে।

RandomAccessFile এবং Tuples এর মাধ্যমে ফাইল থেকে ডেটা পড়া

import org.javatuples.Pair;
import java.io.RandomAccessFile;
import java.io.IOException;

public class TupleWithRandomAccessFileExample {
    public static void main(String[] args) {
        String filePath = "tupleData.txt";

        try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
            // ফাইলের প্রথমে ডেটা লেখা
            file.writeUTF("Alice");
            file.writeInt(25);
            file.writeUTF("Bob");
            file.writeInt(30);

            // ফাইল পয়েন্টারকে প্রথমে নিয়ে যাওয়া
            file.seek(0);

            // Tuples এ ডেটা সংরক্ষণ
            Pair<String, Integer> person1 = Pair.with(file.readUTF(), file.readInt());
            Pair<String, Integer> person2 = Pair.with(file.readUTF(), file.readInt());

            // Tuples এর ডেটা প্রদর্শন
            System.out.println("Person 1: " + person1.getValue0() + ", Age: " + person1.getValue1());
            System.out.println("Person 2: " + person2.getValue0() + ", Age: " + person2.getValue1());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • RandomAccessFile ব্যবহার করে Person নামক দুইটি Pair Tuples এ ডেটা সংরক্ষণ করা হয়েছে। আমরা seek() মেথডের মাধ্যমে ফাইল পয়েন্টারকে বিভিন্ন স্থানে নিয়ে গিয়ে ডেটা পড়ে Tuples এ সংরক্ষণ করেছি।

RandomAccessFile এর সুবিধা এবং সীমাবদ্ধতা

সুবিধা:

  1. Quick Access: ফাইলের যেকোনো অংশ থেকে ডেটা পড়া এবং লেখা যায়, ফলে দ্রুত এবং দক্ষ কাজ করা যায়।
  2. Random Access: ফাইলের নির্দিষ্ট অংশে দ্রুত অ্যাক্সেস এবং আপডেট করার ক্ষমতা।
  3. Read/Write Mode: ফাইলকে read-write মোডে খোলা যায়, যার ফলে একই ফাইলে পড়া এবং লেখা সম্ভব।

সীমাবদ্ধতা:

  1. Complex File Handling: বড় ফাইল বা কমপ্লেক্স ডেটা কাঠামো ব্যবহার করলে ম্যানেজমেন্ট কঠিন হতে পারে।
  2. No Object Serialization: RandomAccessFile শুধুমাত্র primitive ডেটা টাইপ এবং UTF-encoded স্ট্রিং সমর্থন করে, object serialization জন্য এটি উপযুক্ত নয়।

Best Practices for Random Access File Handling

  1. Error Handling: IOException সঠিকভাবে হ্যান্ডেল করুন এবং ফাইলের সাথে কাজ করার সময় চেষ্টা করুন try-with-resources ব্লক ব্যবহার করতে।
  2. File Pointer Movement: seek() মেথড ব্যবহার করে ফাইল পয়েন্টার সঠিক স্থানে নিয়ে যান।
  3. Buffered I/O: বৃহত্তর ডেটা প্রসেসিংয়ের জন্য BufferedRandomAccessFile ব্যবহার করা যেতে পারে, যেখানে BufferedReader/BufferedWriter এর মত বাফারিং ব্যবস্থাপনা করা হয়।

RandomAccessFile ক্লাস জাভাতে ফাইল পরিচালনার একটি শক্তিশালী উপায়, যা random access এবং data modification এর জন্য সহায়ক। Tuples এর সাথে এই ক্লাস ব্যবহার করলে ফাইল থেকে ডেটা দ্রুত পড়া, লেখা এবং স্টোর করা সহজ হয়। seek() মেথডের মাধ্যমে পয়েন্টার স্থানান্তর করা যায়, যা দ্রুত এবং কার্যকরী ডেটা হ্যান্ডলিং নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...