Hola a todos, hoy os voy a explicar como escribir un fichero con RandomAccessFile.
Con la clase RandomAccessFile podemos leer y escribir archivos de manera aleatoria, es decir, que nos podemos situar en una posición concreta, en lugar de tener que recorrer desde el principio.
Con esta clase, podemos escribir y leer con cada tipo de variable como integer, string, double, etc.
Se escribe de forma binaria en el archivo, por lo que no sera legible para nosotros al abrir el fichero.
Bytes de cada tipo para escribir/leer con RandomAccessFile
Es importante saber que cada tipo de variable ocupa un numero de bytes.
- Long: 8 bytes
- Integer: 4 bytes
- Short: 2 bytes
- Byte: 1 byte
- Double: 8 bytes
- Float: 4 bytes
- Boolean: 1 byte
- Char: 2 bytes
- String: 2 bytes por cada caracter.
Ejemplo
Vamos a crear una clase Producto:
Lo primero es crear los productos que vamos a insertar, yo los voy a meter en un ArrayList.
Vamos a crear el objeto RandomaccessFile:
Necesitamos dos parámetros, uno es la ruta del fichero y otro es el modo de los que tiene estos:
- r: solo lectura.
- rw: lectura y escritura. Este es el más usado.
- rws: es como rw pero vacía el contenido del archivo y la fecha de modificación del archivo.
- rwd: es como rw pero vacía el contenido del archivo, pero es posible que la fecha de modificación no cambie hasta que se cierre el archivo.
Es importante que a la hora de escribir lo hagamos en orden, para cada tipo de variable tenemos un método:
En este caso, cada registro seria 35 bytes (4 (int) + (10 * 2) (string) + 8 (double) + 1 (boolean) + 2 (char)).
Es importante ver como añado los String, uso la clase StringBuffer y lo limito al tamaño que yo desee, en este caso a 10 caracteres, si tiene menos caracteres, lo rellenará con espacios y si tiene más lo cortará. Como he comentado, es importante saber cuánto ocupa cada String para después leer, por eso todos deben tener un tamaño fijo.
Pues ahora vamos a leer el fichero con RandomAccessFile, lo primero es posicionarse en que posición queremos empezar. Esto lo podemos hacer con el método seek, indicando el byte a posicionarse.
También es importante que debemos leer en el orden de como escribimos.
Por lo que si queremos posicionarnos en el segundo registro, tendremos que usar seek(35), ya que el primero es el byte 0, si quisiéramos el tercer registro seria seek(70).
Veamos como se lee:
Te dejo el ejemplo completo:
Para leer los String, os recomiendo leer la longitud que hayamos decidido y guardarlo en un String.
Este seria el resultado:

Te dejo aquí el ejemplo para descargar.
Te dejo un video donde explico este concepto.
Espero que os guste. si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta