Java RandomAccessFile proporciona la facilidad de leer y escribir datos en un archivo. RandomAccessFile trabaja con el archivo como un array de bytes almacenado en el sistema de archivos y un cursor con el que podemos mover la posición del puntero del archivo.
Java RandomAccessFile
La clase RandomAccessFile es parte de Java IO. Al crear una instancia de RandomAccessFile en Java, necesitamos proporcionar el modo para abrir el archivo. Por ejemplo, para abrir el archivo en modo de solo lectura, tenemos que usar “r” y para operaciones de lectura-escritura tenemos que usar “rw”. Usando el puntero del archivo, podemos leer o escribir datos desde el archivo de acceso aleatorio en cualquier posición. Para obtener el puntero del archivo actual, puedes llamar al método
getFilePointer()
y para establecer el índice del puntero del archivo, puedes llamar al método seek(int i)
. Si escribimos datos en un índice donde ya hay datos presentes, los sobrescribirá.
Ejemplo de lectura de Java RandomAccessFile
Podemos leer una matriz de bytes desde un archivo usando RandomAccessFile en Java. A continuación se muestra el pseudocódigo para leer un archivo utilizando 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));
En la primera línea, estamos creando una instancia de RandomAccessFile para el archivo en modo de solo lectura. Luego, en la segunda línea, movemos el puntero del archivo al índice 1. Hemos creado una matriz de bytes de longitud 5, por lo que cuando llamamos al método read(bytes), se leen 5 bytes del archivo a la matriz de bytes. Finalmente, cerramos el recurso RandomAccessFile e imprimimos la matriz de bytes en la consola.
Ejemplo de escritura en Java con RandomAccessFile
Aquí hay un ejemplo simple que muestra cómo escribir datos en un archivo usando RandomAccessFile en Java.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(5);
raf.write("Data".getBytes());
raf.close();
Dado que RandomAccessFile trata el archivo como una matriz de bytes, la operación de escritura puede sobrescribir los datos, así como agregar al final del archivo. Todo depende de la posición del puntero de archivo. Si el puntero se mueve más allá de la longitud del archivo y luego se llama a la operación de escritura, se escribirán datos basura en el archivo. Por lo tanto, debes tener cuidado con esto al usar la operación de escritura.
Ejemplo de añadir al final con RandomAccessFile
Todo lo que necesitamos es asegurarnos de que el puntero de archivo esté al final del archivo para agregar al archivo. A continuación se muestra el código para agregar al archivo usando RandomAccessFile.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(raf.length());
raf.write("Data".getBytes());
raf.close();
Ejemplo de RandomAccessFile de Java
Aquí tienes un ejemplo completo de RandomAccessFile de Java con diferentes operaciones de lectura y escritura.
package com.journaldev.files;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileExample {
public static void main(String[] args) {
try {
// el contenido del archivo es "ABCDEFGH"
String filePath = "/Users/pankaj/Downloads/source.txt";
System.out.println(new String(readCharsFromFile(filePath, 1, 5)));
writeData(filePath, "Data", 5);
// ahora el contenido del archivo es "ABCDEData"
appendData(filePath, "pankaj");
// ahora el contenido del archivo es "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;
}
}
Eso es todo para RandomAccessFile en Java.
Source:
https://www.digitalocean.com/community/tutorials/java-randomaccessfile-example