Exemplo de Java RandomAccessFile

Java RandomAccessFile fornece a facilidade de ler e escrever dados em um arquivo. RandomAccessFile trabalha com o arquivo como um grande array de bytes armazenado no sistema de arquivos e um cursor usando o qual podemos mover a posição do ponteiro do arquivo.

Java RandomAccessFile

A classe RandomAccessFile faz parte do Java IO. Ao criar uma instância de RandomAccessFile em Java, precisamos fornecer o modo para abrir o arquivo. Por exemplo, para abrir o arquivo apenas para leitura, precisamos usar “r” e para operações de leitura e escrita, precisamos usar “rw”. Usando o ponteiro do arquivo, podemos ler ou escrever dados do arquivo de acesso aleatório em qualquer posição. Para obter o ponteiro do arquivo atual, você pode chamar o método getFilePointer() e para definir o índice do ponteiro do arquivo, você pode chamar o método seek(int i). Se escrevermos dados em qualquer índice onde os dados já estão presentes, isso os substituirá.

Exemplo de leitura do Java RandomAccessFile

Podemos ler uma matriz de bytes de um arquivo usando RandomAccessFile em Java. Abaixo está o pseudocódigo para ler arquivo usando 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));

Na primeira linha, estamos criando uma instância de RandomAccessFile para o arquivo no modo somente leitura. Em seguida, na segunda linha, movemos o ponteiro do arquivo para o índice 1. Criamos uma matriz de bytes com comprimento 5, então, quando chamamos o método read(bytes), 5 bytes são lidos do arquivo para a matriz de bytes. Finalmente, fechamos o recurso RandomAccessFile e imprimimos a matriz de bytes no console.

Exemplo de escrita em Java com RandomAccessFile

Aqui está um exemplo simples mostrando como escrever dados em um arquivo usando RandomAccessFile em Java.

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

Como o RandomAccessFile trata o arquivo como uma matriz de bytes, a operação de escrita pode substituir os dados, bem como pode acrescentar ao arquivo. Tudo depende da posição do ponteiro do arquivo. Se o ponteiro for movido além do comprimento do arquivo e então a operação de escrita for chamada, dados indesejados serão gravados no arquivo. Portanto, você deve ter cuidado com isso ao usar a operação de escrita.

Exemplo de apêndice com RandomAccessFile

Tudo o que precisamos é garantir que o ponteiro do arquivo esteja no final do arquivo para anexar a um arquivo. Abaixo está o código para anexar a um arquivo usando RandomAccessFile.

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

Exemplo de RandomAccessFile Java

Aqui está um exemplo completo de RandomAccessFile em Java com diferentes operações de leitura e escrita.

package com.journaldev.files;

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

public class RandomAccessFileExample {

	public static void main(String[] args) {
		try {
			// o conteúdo do arquivo é "ABCDEFGH"
			String filePath = "/Users/pankaj/Downloads/source.txt"; 
			
			System.out.println(new String(readCharsFromFile(filePath, 1, 5)));

			writeData(filePath, "Data", 5);
			// agora o conteúdo do arquivo é "ABCDEData"
			
			appendData(filePath, "pankaj");
			// agora o conteúdo do arquivo é "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;
	}

}

Isso é tudo para RandomAccessFile em Java.

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