Esempio di RandomAccessFile in Java

Java RandomAccessFile fornisce la possibilità di leggere e scrivere dati su un file. RandomAccessFile lavora con il file come un grande array di byte memorizzato nel sistema di file e un cursore con cui possiamo spostare la posizione del puntatore del file.

Java RandomAccessFile

La classe RandomAccessFile fa parte di Java IO. Durante la creazione dell’istanza di RandomAccessFile in Java, è necessario fornire la modalità per aprire il file. Ad esempio, per aprire il file in modalità sola lettura, dobbiamo utilizzare “r” e per le operazioni di lettura-scrittura dobbiamo utilizzare “rw”. Utilizzando il puntatore del file, possiamo leggere o scrivere dati dal file di accesso casuale in qualsiasi posizione. Per ottenere il puntatore del file corrente, è possibile chiamare il metodo getFilePointer() e per impostare l’indice del puntatore del file, è possibile chiamare il metodo seek(int i). Se scriviamo dati in un indice in cui sono già presenti dati, questi verranno sovrascritti.

Esempio di lettura di Java RandomAccessFile

Possiamo leggere un array di byte da un file utilizzando RandomAccessFile in java. Di seguito è riportato il codice pseudo per leggere il file utilizzando 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));

Nella prima riga, stiamo creando un’istanza di RandomAccessFile per il file in modalità di sola lettura. Poi nella seconda riga, stiamo spostando il puntatore al file all’indice 1. Abbiamo creato un array di byte di lunghezza 5, quindi quando chiamiamo il metodo read(bytes), vengono letti 5 byte dal file all’array di byte. Infine, stiamo chiudendo la risorsa RandomAccessFile e stampando l’array di byte sulla console.

Esempio di scrittura Java RandomAccessFile

Ecco un semplice esempio di come scrivere dati su un file utilizzando RandomAccessFile in java.

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

Dal momento che RandomAccessFile tratta il file come un array di byte, l’operazione di scrittura può sovrascrivere i dati così come può aggiungere a un file. Tutto dipende dalla posizione del puntatore al file. Se il puntatore viene spostato oltre la lunghezza del file e poi viene chiamata l’operazione di scrittura, allora ci saranno dati spazzatura scritti nel file. Quindi dovresti fare attenzione a questo mentre usi l’operazione di scrittura.

Esempio di appendice RandomAccessFile

Tutto ciò di cui abbiamo bisogno è assicurarci che il puntatore del file sia alla fine del file per aggiungere al file. Di seguito è riportato il codice per l’aggiunta a un file utilizzando RandomAccessFile.

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

Esempio di RandomAccessFile in Java

Ecco un esempio completo di RandomAccessFile in Java con diverse operazioni di lettura e scrittura.

package com.journaldev.files;

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

public class RandomAccessFileExample {

	public static void main(String[] args) {
		try {
			// il contenuto del file è "ABCDEFGH"
			String filePath = "/Users/pankaj/Downloads/source.txt"; 
			
			System.out.println(new String(readCharsFromFile(filePath, 1, 5)));

			writeData(filePath, "Data", 5);
			// ora il contenuto del file è "ABCDEData"
			
			appendData(filePath, "pankaj");
			// ora il contenuto del file è "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;
	}

}

Questo è tutto per RandomAccessFile in Java.

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