توفر Java RandomAccessFile مرفقات لقراءة وكتابة البيانات إلى ملف. تعمل RandomAccessFile مع الملف كمصفوفة كبيرة من البايتات المخزنة في نظام الملفات ومؤشر يمكننا استخدامه لتحريك موضع مؤشر الملف.
Java RandomAccessFile
فئة RandomAccessFile هي جزء من Java IO. أثناء إنشاء مثيل لـ RandomAccessFile في جافا، نحتاج إلى توفير الوضع لفتح الملف. على سبيل المثال، لفتح الملف للقراءة فقط يجب علينا استخدام “r” ولعمليات القراءة والكتابة يجب علينا استخدام “rw”. باستخدام مؤشر الملف، يمكننا قراءة أو كتابة البيانات من ملف الوصول العشوائي في أي موضع. للحصول على مؤشر الملف الحالي، يمكنك استدعاء الطريقة
getFilePointer()
ولتعيين مؤشر الملف، يمكنك استدعاء الطريقة seek(int i)
. إذا قمنا بكتابة بيانات في أي فهرس حيث توجد بيانات بالفعل، فسيتم استبدالها.
مثال على قراءة Java RandomAccessFile
يمكننا قراءة مصفوفة البايت من ملف باستخدام RandomAccessFile في جافا. أدناه الشفرة الزائفة لـ قراءة الملف باستخدام RandomAccessFile.
RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
raf.seek(1);
byte[] bytes = new byte[5];
raf.read(bytes);
raf.close();
System.out.println(new String(bytes));
في السطر الأول، نقوم بإنشاء مثيل RandomAccessFile للملف في وضع القراءة فقط. ثم في السطر الثاني، نقوم بتحريك مؤشر الملف إلى الفهرس 1. لقد قمنا بإنشاء مصفوفة بايت بطول 5، لذا عندما نستدعي طريقة read(bytes)، يتم قراءة 5 بايتات من الملف إلى مصفوفة البايت. في النهاية، نقوم بإغلاق مورد RandomAccessFile وطباعة مصفوفة البايت إلى وحدة التحكم.
مثال على كتابة Java RandomAccessFile
إليك مثال بسيط يوضح كيفية كتابة البيانات إلى ملف باستخدام RandomAccessFile في جافا.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(5);
raf.write("Data".getBytes());
raf.close();
نظرًا لأن RandomAccessFile يعامل الملف كمصفوفة بايت، يمكن لعملية الكتابة استبدال البيانات وكذلك يمكنها إلحاق بملف. كل ذلك يعتمد على موضع مؤشر الملف. إذا تم نقل المؤشر إلى ما بعد طول الملف ثم تم استدعاء عملية الكتابة، فستتم كتابة بيانات فاسدة في الملف. لذا يجب عليك أن تأخذ الحيطة بهذا أثناء استخدام عملية الكتابة.
مثال على إلحاق RandomAccessFile
كل ما نحتاجه هو التأكد من أن المؤشر على الملف في نهاية الملف لإضافة إلى الملف. أدناه الكود لإضافة إلى الملف باستخدام RandomAccessFile.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(raf.length());
raf.write("Data".getBytes());
raf.close();
مثال على Java RandomAccessFile
إليك مثال كامل على RandomAccessFile في Java مع عمليات قراءة وكتابة مختلفة.
package com.journaldev.files;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileExample {
public static void main(String[] args) {
try {
// محتوى الملف هو "ABCDEFGH"
String filePath = "/Users/pankaj/Downloads/source.txt";
System.out.println(new String(readCharsFromFile(filePath, 1, 5)));
writeData(filePath, "Data", 5);
// الآن محتوى الملف هو "ABCDEData"
appendData(filePath, "pankaj");
// الآن محتوى الملف هو "ABCDEDatapankaj"
} catch (IOException e) {
e.printStackTrace();
}
}
private static void appendData(String filePath, String data) throws IOException {
RandomAccessFile raFile = new RandomAccessFile(filePath, "rw");
raFile.seek(raFile.length());
System.out.println("current pointer = "+raFile.getFilePointer());
raFile.write(data.getBytes());
raFile.close();
}
private static void writeData(String filePath, String data, int seek) throws IOException {
RandomAccessFile file = new RandomAccessFile(filePath, "rw");
file.seek(seek);
file.write(data.getBytes());
file.close();
}
private static byte[] readCharsFromFile(String filePath, int seek, int chars) throws IOException {
RandomAccessFile file = new RandomAccessFile(filePath, "r");
file.seek(seek);
byte[] bytes = new byte[chars];
file.read(bytes);
file.close();
return bytes;
}
}
هذا كل شيء بخصوص RandomAccessFile في جافا.
Source:
https://www.digitalocean.com/community/tutorials/java-randomaccessfile-example