Ficheiros de acceso aleatorio
Ficheiros de acceso aleatorio
Accédese directamente a datos situados en calquera posición do ficheiro. Úsase a clase RandomAccessFile para este tipo de acceso.
Os métodos máis usados son os seguintes:
- void seek(Long pos): posiciona o punteiro na posición pos.
- int skipBytes(int desprazamento): despraza o punteiro desde a posición actual o número de bytes indicados no desprazamento.
- String readLine(): obtense unha cadea con todo o contido da liña actual.
- int read(byte[] buffer, int offset, int lonxitude): este método ten varias versións dependendo dos parámetros de entrada. Úsase para obter un determinado número de bytes ou ata que se encha o buffer. Devolve -1 no caso de final de ficheiro.
- write(int i): escribe no ficheiro un byte.
- write(byte[] buffer, int offset, int lonxitude): con estes parámetros pode escribir todo o buffer ou indicarlle a partir de que posición e ata onde. Do mesmo xeito que lendo.
Para lectura e escritura máis cómoda (non hai que contar bytes) existen as versións de write() e read() de datos primitivos. Por exemplo:
- writeBoolean(boolean b): escribe un byte que representa un booleano na posición/puntero do ficheiro.
- double readDouble(): obtense un valor double do ficheiro.
Para a documentación completa: docOficial
Para crear obxectos desta clase fai falta un obxecto tipo File e indicarlle o modo de apertura. O modo de apertura é un String e pode ter estos valores:
- “r”: modo só lectura.
- “rw”: modo de lectura e escritura.
- “rwd” e “rws”: modos máis seguros e síncronos para evitar a perda de información frente a fallos de sistema ou comunicación. As operacións son máis lentas.
Posible exemplo de crea un obxecto: File f = new File ("/ficheiros/personas.dat"); RandomAccessFile ficheiro = new RandomAccessFile(f, "rw");
Os rexistros non teñen que ser do mesmo tamaño, pero o seu tamaño e posición. Con esta clase recorda que podemos movernos hacia diane e hacia atras, é moi diferente á forma de traballar de anteriores puntos onde se percorría sempre de inicio a fin.
A continuación amósase un exemplo sinxelo de escritura/lectura e posicionamento de datos double:
Exemplo→ EscribirAle.java
No seguinte exemplo amósase a xestión que hai que facer cos tamaños de diferentes tipos de datos:
Exemplo→ AleCompleto.java