Saltar la navegación

4.2.- Operaciones básicas sobre ficheros de acceso aleatorio.

Ruleta de casino.

A menudo, no necesitas leer un fichero de principio a fin, sino simplemente acceder al fichero como si fuera una base de datos, donde se salta de un registro a otro; cada uno en diferentes partes del fichero. Java proporciona una clase RandomAccessFile para este tipo de entrada/salida.

Esta clase:

  • Permite leer y escribir sobre el fichero, no es necesario dos clases diferentes.
  • Necesita que le especifiquemos el modo de acceso al construir un objeto de esta clase: sólo lectura o bien lectura y escritura.
  • Posee métodos específicos de desplazamiento como seek(long posicion) o skipBytes(int desplazamiento) para poder movernos de un registro a otro del fichero, o posicionarnos directamente en una posición concreta del fichero.

Por esas características que presenta la clase, un archivo de acceso directo tiene sus registros de un tamaño fijo o predeterminado de antemano.

La clase posee dos constructores:

  • RandomAccessFile(File file, String mode).
  • RandomAccessFile(String name, String mode).

En el primer caso se pasa un objeto File como primer parámetro, mientras que en el segundo caso es un String. El modo es: "r" si se abre en modo lectura o "rw" si se abre en modo lectura y escritura.

A continuación puedes ver una presentación en la que se muestra cómo abrir y escribir en un fichero de acceso aleatorio. También, en el segundo código descargable, se presenta el código correspondiente a la escritura y localización de registros en ficheros de acceso aleatorio.

Ejemplo:

Vamos a ver un pequeño ejemplo, Log.java, que añade una cadena a un fichero existente, lo crea en caso de que no exista.

import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomEjemplo {
public static void main( String args[] ) throws IOException {
    RandomAccessFile miRAFile;
    String s = "linea a añadir al final del fichero";
    // Abrimos el fichero de acceso aleatorio
    miRAFile = new RandomAccessFile( "java.log","rw" );
    // Nos vamos al final del fichero
    miRAFile.seek( miRAFile.length() );
    // Incorporamos la cadena al fichero
    miRAFile.writeBytes( s );
    // Cerramos el fichero
    miRAFile.close();
    }
}

Autoevaluación

Indica si la afirmación es verdadera o falsa:

Pregunta 1

Un objeto de la clase RandomAccessFile necesita el modo de acceso al crear el objeto.