উদাহরণ সহ RandomAccessFile এর ব্যবহার

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

372

RandomAccessFile হল একটি বিশেষ ধরনের I/O ক্লাস যা ফাইলের নির্দিষ্ট অবস্থানে সরাসরি ডেটা পড়া এবং লেখা করতে সহায়ক। এটি ফাইলের যে কোন অবস্থান থেকে ডেটা পড়তে এবং সেই অবস্থানে ডেটা লিখতে সক্ষম, যা সাধারণ FileInputStream বা FileOutputStream এর মাধ্যমে সম্ভব নয়। RandomAccessFile ক্লাসটি বাইনারি এবং টেক্সট ফাইলের জন্য কার্যকর।


RandomAccessFile ক্লাসের ভূমিকা

  1. ডেটা পড়া এবং লেখা: read(), write() মেথড ব্যবহার করে ডেটা পড়া এবং লেখা।
  2. ফাইলের যে কোন অবস্থানে যাওয়া: seek() মেথড ব্যবহার করে ফাইলের নির্দিষ্ট অবস্থানে যাওয়া।
  3. ফাইলের আকার এবং পজিশন নির্ধারণ: getFilePointer() মেথড দ্বারা বর্তমান পজিশন জানা যায় এবং length() দ্বারা ফাইলের আকার জানা যায়।

RandomAccessFile এর প্রধান মেথড

মেথডবর্ণনা
seek(long pos)ফাইলের নির্দিষ্ট পজিশনে যায় (বাইট আকারে)।
read()একটি বাইট পড়ে।
read(byte[] b)বাফার থেকে একাধিক বাইট পড়ে।
write(int b)একটি বাইট লেখে।
write(byte[] b)বাফার থেকে একাধিক বাইট লেখে।
getFilePointer()বর্তমান পজিশন রিটার্ন করে।
length()ফাইলের মোট সাইজ রিটার্ন করে।

RandomAccessFile উদাহরণ

১. ফাইলের নির্দিষ্ট অবস্থানে ডেটা লেখা এবং পড়া

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

public class RandomAccessFileExample {
    public static void main(String[] args) {
        String filePath = "example.dat";
        
        // ফাইল লেখার জন্য
        try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) {
            // কিছু ডেটা লিখি
            raf.writeInt(123);      // একটি int লিখলাম
            raf.writeDouble(3.14159); // একটি double লিখলাম
            raf.writeUTF("Hello, World!"); // একটি String লিখলাম

            // বর্তমান ফাইল পজিশন প্রিন্ট করা
            System.out.println("Current file pointer position: " + raf.getFilePointer());

            // নির্দিষ্ট অবস্থানে যাওয়া
            raf.seek(0);  // প্রথম বাইটের অবস্থানে ফিরে যাই
            System.out.println("Reading data after seeking to position 0:");
            
            // ডেটা পড়া
            System.out.println("Read int: " + raf.readInt());
            System.out.println("Read double: " + raf.readDouble());
            System.out.println("Read String: " + raf.readUTF());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ফলস্বরূপ:

Current file pointer position: 22
Reading data after seeking to position 0:
Read int: 123
Read double: 3.14159
Read String: Hello, World!

২. ফাইলের নির্দিষ্ট অংশে ডেটা আপডেট করা

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

public class RandomAccessFileUpdateExample {
    public static void main(String[] args) {
        String filePath = "example.dat";
        
        // ফাইল লেখার জন্য
        try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) {
            // কিছু ডেটা লিখি
            raf.writeInt(123);
            raf.writeDouble(3.14159);
            raf.writeUTF("Hello");

            // ফাইল পজিশনে গিয়ে ডেটা আপডেট করা
            raf.seek(4);  // ফাইলের দ্বিতীয় ডেটাতে গিয়ে সেটি আপডেট করি
            raf.writeInt(456); // int আপডেট

            // ফাইল পজিশনে ফিরে যাওয়া
            raf.seek(0); 
            System.out.println("Updated int: " + raf.readInt());
            System.out.println("Updated double: " + raf.readDouble());
            System.out.println("Updated String: " + raf.readUTF());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ফলস্বরূপ:

Updated int: 456
Updated double: 3.14159
Updated String: Hello

৩. RandomAccessFile ব্যবহার করে Tuple ধারণা

আপনি Java Tuples ব্যবহার করে ফাইলের নাম এবং ফাইলের আকার একত্রে সংরক্ষণ করতে পারেন। এই পদ্ধতিতে একটি Tuple তৈরি করা হয় যা ফাইলের নাম এবং সাইজ সংরক্ষণ করে, যা পরবর্তী পর্যায়ে ব্যবহার করা যেতে পারে।

import org.apache.commons.lang3.tuple.Pair;
import java.io.RandomAccessFile;
import java.io.IOException;

public class TupleRandomAccessFileExample {
    public static void main(String[] args) {
        String filePath = "example.dat";
        
        // ফাইল লেখা এবং তথ্য একত্রে Tuple এ সংরক্ষণ
        Pair<String, Long> fileData = writeFile(filePath);
        System.out.println("File Name: " + fileData.getLeft());
        System.out.println("File Size: " + fileData.getRight() + " bytes");

        // ফাইলের কন্টেন্ট পড়া
        readFile(filePath);
    }

    public static Pair<String, Long> writeFile(String filePath) {
        try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) {
            // কিছু ডেটা লিখি
            raf.writeInt(123);      // একটি int
            raf.writeDouble(3.14159); // একটি double
            raf.writeUTF("Hello, World!"); // একটি String

            // ফাইলের আকার
            long fileSize = raf.length();

            // ফাইল নাম এবং আকার Tuple এ সংরক্ষণ
            return Pair.of(filePath, fileSize);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return Pair.of(filePath, 0L); // ডিফল্ট মান রিটার্ন
    }

    public static void readFile(String filePath) {
        try (RandomAccessFile raf = new RandomAccessFile(filePath, "r")) {
            // ডেটা পড়া
            System.out.println("Reading data from the file:");
            System.out.println("Read int: " + raf.readInt());
            System.out.println("Read double: " + raf.readDouble());
            System.out.println("Read String: " + raf.readUTF());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ফলস্বরূপ:

File Name: example.dat
File Size: 22 bytes
Reading data from the file:
Read int: 123
Read double: 3.14159
Read String: Hello, World!

RandomAccessFile এর সুবিধা:

  1. ফাইলের যে কোন অবস্থানে ডেটা অ্যাক্সেস করা: seek() মেথড ব্যবহার করে ফাইলের যে কোন অবস্থানে যাওয়া যায়।
  2. বাড়তি কার্যক্ষমতা: এটি ফাইলের নির্দিষ্ট অংশে ডেটা পড়া এবং লেখা করার জন্য দ্রুত এবং কার্যকর।
  3. ডেটার আপডেট সহজ: ফাইলের মাঝের ডেটা আপডেট করা সহজ, কারণ আপনি নির্দিষ্ট অবস্থানে seek() করে ডেটা লিখতে পারেন।

RandomAccessFile এর সীমাবদ্ধতা:

  1. বাইনারি ডেটা: RandomAccessFile শুধুমাত্র বাইনারি ডেটা পড়ে এবং লেখে। টেক্সট ফাইল পরিচালনার জন্য FileReader এবং FileWriter ব্যবহার করা উচিত।
  2. ব্যবহারিক জটিলতা: নির্দিষ্ট পজিশনে যাওয়া এবং ডেটা আপডেট করার জন্য সঠিক অবস্থান জানা প্রয়োজন।
  3. ধীর গতি: বড় আকারের ফাইলের জন্য RandomAccessFile ধীর হতে পারে, যদি অনেক অপারেশন একে অপরের পেছনে করা হয়।

RandomAccessFile Java তে খুবই শক্তিশালী টুল, যা ফাইলের নির্দিষ্ট অবস্থান থেকে ডেটা পড়া এবং লেখা করতে সক্ষম। এটি বাইনারি ডেটা ম্যানিপুলেশনের জন্য খুবই কার্যকর এবং Java Tuples ব্যবহার করে আপনি ফাইলের নাম এবং আকার একত্রে সংরক্ষণ করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...