Imprimir

La clase RandomAccessFile permite el acceso directo a cualquier posición de un fichero de texto. Esta clase permite abrir los ficheros de texto en modo lectura ("r") o en modo lectura y escritura ("rw"), especificándolo en el segundo parámetro del método constructor.

El lugar del fichero al que se accede para leer o escribir está marcado por un puntero que señala al carácter a partir del cual se hará la operación de lectura o escritura. Cada vez que se hace una lectura o escritura, el puntero se posiciona automáticamente en el siguiente carácter.

La clase RandomAccessFile dispone de varios métodos para permitir las operaciones sobre los ficheros:

Ejemplo en el que se accede directamente a una posición del fichero de texto y se convierte a mayúsculas el carácter leído en esa posición.

        //La variable 'pos' indicará la posición del puntero del fichero,
// señalando el lugar donde se leerá o escribirá
int pos = 11;
String nombreFichero = "prueba.txt";
RandomAccessFile raf = null;
try
{
//Se abre el fichero para permitir lectura y escritura
raf = new RandomAccessFile(nombreFichero,"rw");
//Obtener el tamaño del fichero
long tamaño = raf.length();
//Posicionar el puntero del fichero en la posición indicada
raf.seek(pos);
//Comprobar si se intenta posicionar el puntero mas allá
// del tamaño del fichero
if(raf.getFilePointer()<tamaño)
{
//Leer un carácter y avanzar puntero al siguiente carácter
//Los caracteres leídos se toman de tipo entero
int caract = raf.read();
//Retroceder una posición para volver a la posición anterior
raf.seek(raf.getFilePointer()-1);
//Escribir el carácter leído convertido a mayúsculas
raf.write(Character.toUpperCase(caract));
}
}
catch (FileNotFoundException e) {
System.out.println("Error: Fichero no encontrado");
System.out.println(e.getMessage());
}
catch(Exception e)
{
System.out.println("Error de lectura/escritura en el fichero");
System.out.println(e.getMessage());
}
finally {
try {
if(raf != null)
raf.close();
}
catch (Exception e) {
System.out.println("Error al cerrar el fichero");
System.out.println(e.getMessage());
}
}
        //La variable 'pos' indicará la posición del puntero del fichero,
        //  señalando el lugar donde se leerá o escribirá
        int pos = 11;
        String nombreFichero = "prueba.txt";
        RandomAccessFile raf = null;
        try
        {
            //Se abre el fichero para permitir lectura y escritura
            raf = new RandomAccessFile(nombreFichero,"rw");
            //Obtener el tamaño del fichero
            long tamaño = raf.length();
            //Posicionar el puntero del fichero en la posición indicada
            raf.seek(pos);
            //Comprobar si se intenta posicionar el puntero mas allá
            //  del tamaño del fichero
            if(raf.getFilePointer()<tamaño)
            {
                //Leer un carácter y avanzar puntero al siguiente carácter
                //Los caracteres leídos se toman de tipo entero
                int caract = raf.read();
                //Retroceder una posición para volver a la posición anterior
                raf.seek(raf.getFilePointer()-1);
                //Escribir el carácter leído convertido a mayúsculas
                raf.write(Character.toUpperCase(caract));
            }
            //Cerrar el fichero
            raf.close();
        }
        catch (FileNotFoundException e) {
            System.out.println("Error: Fichero no encontrado");
            System.out.println(e.toString());
        }
        catch(Exception e)
        {
            System.out.println("Error de lectura/escritura en el fichero");
            System.out.println(e.toString());
        }
        finally {
            try {
                if(raf != null)
                    raf.close();
            }
            catch (Exception e) {
                System.out.println("Error al cerrar el fichero");
                System.out.println(e.toString());
            }
        }