Java dispone de la clase RandomAccessFile que permite acceder al contenido de un fichero
binario de forma aleatoria.
Para crear objetos de esta clase, al constructor se le puede pasar, o la
ruta mediante un String o mediante un File. En cualquiera de los dos casos hay
que pasar un segundo parámetro con el modo de acceso. El modo de acceso puede ser “r”, “rw”
Ejemplos:
Fich=
new RandomAccessFile(String nombre, String modoAcceso)
Fich =
new RandomAccessFile(File fic, String modoAcceso)
Los métodos más importantes
son:
long getFilePointer()
Devuelve la posición del puntero en el fichero.
void seek(long pos)
Pone el puntero en la posición dada por pos, tomada
desde el inicio.
long length()
Devuelve el tamaño del fichero en bytes.
Int skipBytes (int desplaz)
Mueve el puntero desde su posición el número de bytes
indicado por desplaz.
Ejemplo:
Vamos a guardar los datos de una serie de empleados. Interesa que los datos
de cada persona tengan la misma longitud para poder saltar e ir a una persona,
para ello limitamos (fijamos) el tamaño de los String antes de escribirlos:
buffer
= new StringBuffer(apellidos[i]);
buffer.setLength(10);
El resto de campos tienen una longitud fija, porque son enteros y double.
En total: int (4 bytes), string (20 bytes), int
(4 bytes) y double (8 bytes) = 36 bytes.
Tamaño del fichero= 8 registros x 36 bytes = 288 bytes
public class
EscribirFichAleatorio {
public static void
main(String[] args) throws IOException {
// TODO code application logic here
File fich = new
File("Empl_aleat.dat");
RandomAccessFile file = new
RandomAccessFile(fich, "rw");
String[] apellidos = {"MARTÍN", "SORIA",
"FERNÁNDEZ", "LUNA", "GARCÍA", "PÉREZ",
"RODRÍGUEZ", "MARTÍNEZ"};
int[]
dept = {10, 20, 30, 20, 10, 40, 30, 40};
Double[] salario = {850.65, 12035.36,
2156.36, 1500.32, 989.23, 1566.32, 1866.88, 2356.78};
StringBuffer buffer = null;
for (int i = 0; i <
apellidos.length; i++) {
file.writeInt(i + 1); //identificador de empleado
buffer
= new StringBuffer(apellidos[i]);
buffer.setLength(10);
file.writeChars(buffer.toString());
file.writeInt(dept[i]);
file.writeDouble(salario[i]);
}
file.close();
}
}
No hay comentarios:
Publicar un comentario