Voorbeeld van Java RandomAccessFile

Java RandomAccessFile biedt de mogelijkheid om gegevens naar een bestand te lezen en te schrijven. RandomAccessFile werkt met het bestand als een groot array van bytes opgeslagen in het bestandssysteem en een cursor waarmee we de positie van de bestandsaanwijzer kunnen verplaatsen.

Java RandomAccessFile

De klasse RandomAccessFile maakt deel uit van Java IO. Bij het maken van een instantie van RandomAccessFile in Java moeten we de modus opgeven om het bestand te openen. Bijvoorbeeld, om het bestand te openen voor alleen-lezen modus moeten we “r” gebruiken en voor lees-schrijfbewerkingen moeten we “rw” gebruiken. Met behulp van de bestandsaanwijzer kunnen we gegevens lezen of schrijven vanaf een willekeurige positie in het random access-bestand. Om de huidige bestandsaanwijzer te krijgen, kunt u de methode getFilePointer() aanroepen en om de index van de bestandsaanwijzer in te stellen, kunt u de methode seek(int i) aanroepen. Als we gegevens schrijven op een index waar al gegevens aanwezig zijn, zal het deze overschrijven.

Voorbeeld van lezen met Java RandomAccessFile

We kunnen een byte-array uit een bestand lezen met RandomAccessFile in java. Hieronder staat de pseudocode om een bestand te lezen met 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 de eerste regel creëren we een RandomAccessFile-instantie voor het bestand in alleen-lezen modus. Vervolgens verplaatsen we in de tweede regel de bestandspointer naar index 1. We hebben een byte-array van lengte 5 gemaakt, dus wanneer we de methode read(bytes) aanroepen, worden er 5 bytes van het bestand naar de byte-array gelezen. Ten slotte sluiten we de RandomAccessFile-bron en printen we de byte-array naar de console.

Java RandomAccessFile schrijfvoorbeeld

Hier is een eenvoudig voorbeeld dat laat zien hoe je gegevens naar een bestand schrijft met RandomAccessFile in java.

RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(5);
raf.write("Data".getBytes());
raf.close();

Omdat RandomAccessFile het bestand als een byte-array behandelt, kan de schrijfoperatie de gegevens overschrijven, maar het kan ook aan een bestand worden toegevoegd. Dit hangt allemaal af van de positie van de bestandspointer. Als de pointer voorbij de bestandslengte wordt verplaatst en vervolgens de schrijfoperatie wordt aangeroepen, dan zullen er junkgegevens in het bestand worden geschreven. Dus hier moet je op letten bij het gebruik van de schrijfoperatie.

RandomAccessFile voorbeeld van toevoegen

Het enige wat we nodig hebben is om ervoor te zorgen dat de bestandsaanduiding aan het einde van het bestand staat om aan een bestand toe te voegen. Hieronder staat de code voor het toevoegen aan een bestand met behulp van RandomAccessFile.

RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(raf.length());
raf.write("Data".getBytes());
raf.close();

Java RandomAccessFile Voorbeeld

Hier is een volledig Java RandomAccessFile-voorbeeld met verschillende lees- en schrijfbewerkingen.

package com.journaldev.files;

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

public class RandomAccessFileExample {

	public static void main(String[] args) {
		try {
			
// bestandsinhoud is "ABCDEFGH"


			String filePath = "/Users/pankaj/Downloads/source.txt"; 
			
			System.out.println(new String(readCharsFromFile(filePath, 1, 5)));

			writeData(filePath, "Data", 5);
			
// nu is de bestandsinhoud "ABCDEData"


			
			appendData(filePath, "pankaj");
			
// nu is de bestandsinhoud "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;
	}

}

Dat is alles voor RandomAccessFile in Java.

Source:
https://www.digitalocean.com/community/tutorials/java-randomaccessfile-example