Java RandomAccessFile bietet die Möglichkeit, Daten in eine Datei zu lesen und zu schreiben. RandomAccessFile arbeitet mit der Datei als großem Array von Bytes, das im Dateisystem gespeichert ist, und einem Cursor, mit dem wir die Position des Dateizeigers verschieben können.
Java RandomAccessFile
Die RandomAccessFile-Klasse ist Teil von Java IO. Beim Erstellen einer Instanz von RandomAccessFile in Java müssen wir den Modus angeben, um die Datei zu öffnen. Zum Beispiel müssen wir für den Modus „nur lesen“ „r“ verwenden und für Lese-Schreiboperationen müssen wir „rw“ verwenden. Mit dem Dateizeiger können wir Daten aus der Zufallszugriffsdatei an jeder Position lesen oder schreiben. Um den aktuellen Dateizeiger zu erhalten, können Sie die Methode
getFilePointer()
aufrufen, und um den Dateizeigerindex festzulegen, können Sie die Methode seek(int i)
aufrufen. Wenn wir Daten an einem Index schreiben, an dem bereits Daten vorhanden sind, werden diese überschrieben.
Beispiel für das Lesen von Java RandomAccessFile
Wir können ein Byte-Array aus einer Datei mit RandomAccessFile in Java lesen. Unten ist der Pseudocode zum Lesen einer Datei mit 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));
In der ersten Zeile erstellen wir eine Instanz von RandomAccessFile für die Datei im Nur-Lese-Modus. Dann bewegen wir in der zweiten Zeile den Dateizeiger auf Index 1. Wir haben ein Byte-Array der Länge 5 erstellt, also wenn wir die Methode read(bytes) aufrufen, werden 5 Bytes aus der Datei in das Byte-Array gelesen. Schließlich schließen wir die RandomAccessFile-Ressource und geben das Byte-Array in die Konsole aus.
Java RandomAccessFile Schreibbeispiel
Hier ist ein einfaches Beispiel, das zeigt, wie man Daten mit RandomAccessFile in Java in eine Datei schreibt.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(5);
raf.write("Data".getBytes());
raf.close();
Da RandomAccessFile die Datei als ein Byte-Array behandelt, kann eine Schreiboperation die Daten überschreiben oder an eine Datei anhängen. Es hängt alles von der Position des Dateizeigers ab. Wenn der Zeiger über die Dateilänge hinausbewegt wird und dann eine Schreiboperation aufgerufen wird, werden Junk-Daten in die Datei geschrieben. Daher sollten Sie dies bei der Verwendung der Schreiboperation beachten.
RandomAccessFile Anhangbeispiel
Alles, was wir brauchen, ist sicherzustellen, dass der Dateizeiger am Ende der Datei steht, um an eine Datei anzuhängen. Unten ist der Code zum Anhängen an eine Datei unter Verwendung von RandomAccessFile.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(raf.length());
raf.write("Data".getBytes());
raf.close();
Java RandomAccessFile Beispiel
Hier ist ein vollständiges Java-Beispiel für RandomAccessFile mit verschiedenen Lese- und Schreiboperationen.
package com.journaldev.files;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileExample {
public static void main(String[] args) {
try {
// Dateiinhalt ist "ABCDEFGH"
String filePath = "/Users/pankaj/Downloads/source.txt";
System.out.println(new String(readCharsFromFile(filePath, 1, 5)));
writeData(filePath, "Data", 5);
//jetzt ist der Dateiinhalt "ABCDEData"
appendData(filePath, "pankaj");
//jetzt ist der Dateiinhalt "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;
}
}
Das ist alles für RandomAccessFile in Java.
Source:
https://www.digitalocean.com/community/tutorials/java-randomaccessfile-example