הָקְבּוּצָה Java RandomAccessFile מספקת את האפשרות לקריאה וכתיבה של נתונים לקובץ. RandomAccessFile עובד עם קובץ כמו מערך של בתים מאוחסן במערכת הקבצים ועם סמן שבאמצעותו אנו יכולים להזיז את מיקום הסמן של הקובץ.
הקבצים האקראיים של Java
מחלקת RandomAccessFile היא חלק מ־Java IO. בעת יצירת מופע של RandomAccessFile ב־java, עלינו לספק את המצב לפתיחת הקובץ. לדוגמה, כדי לפתוח את הקובץ במצב קריאה בלבד עלינו להשתמש ב-"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();
דוגמה ל־RandomAccessFile ב־Java
כאן יש לך דוגמה מלאה ל־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 ב־Java.
Source:
https://www.digitalocean.com/community/tutorials/java-randomaccessfile-example