"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Archivos de acceso aleatorio

Archivos de acceso aleatorio

Publicado el 2024-08-01
Navegar:291

Java proporciona la clase RandomAccessFile para permitir leer y escribir datos en cualquier ubicación del archivo. Todas las transmisiones que ha utilizado hasta ahora se conocen como transmisiones de solo lectura o de solo escritura. Estas transmisiones se denominan transmisiones secuenciales. Un archivo que se abre mediante una secuencia secuencial se denomina archivo de acceso secuencial. El contenido de un archivo de acceso secuencial no se puede actualizar. Sin embargo, muchas veces es necesario modificar archivos. Java proporciona la clase RandomAccessFile para permitir leer y escribir datos en cualquier ubicación de un archivo. Un archivo que se abre usando la clase RandomAccessFile se conoce como archivo de acceso aleatorio.

La clase RandomAccessFile implementa las interfaces DataInput y DataOutput, como se muestra en la figura siguiente. La interfaz DataInput define los métodos para leer valores y cadenas de tipo primitivo (por ejemplo, readInt, readDouble, readChar, readBoolean, readUTF) y la interfaz DataOutput define los métodos para escribir valores y cadenas de tipo primitivo (por ejemplo, writeInt, writeDouble, escribirChar, escribirBooleano, escribirUTF).

Image description

Al crear un Archivo de acceso aleatorio, puede especificar uno de dos modos: r o rw. El modo r significa que la transmisión es de solo lectura, y el modo rw indica que la transmisión permite lectura y escritura. Por ejemplo, la siguiente declaración crea una nueva secuencia, raf, que permite al programa leer y escribir en el archivo test.dat:

RandomAccessFile raf = nuevo RandomAccessFile("test.dat", "rw");

Si test.dat ya existe, se crea raf para acceder a él; si test.dat no existe, se crea un nuevo archivo llamado test.dat y se crea raf para acceder al nuevo archivo. El método raf.length() devuelve el número de bytes en test.dat en un momento dado. Si agrega nuevos datos al archivo, raf.length() aumenta.

Si el archivo no está destinado a ser modificado, ábrelo con el modo r. Esto evita la modificación involuntaria del archivo.

Un archivo de acceso aleatorio consta de una secuencia de bytes. Un marcador especial llamado puntero de archivo se coloca en uno de estos bytes. Se realiza una operación de lectura o escritura en la ubicación del puntero del archivo. Cuando se abre un archivo, el puntero del archivo se establece al principio del archivo. Cuando lee o escribe datos en el archivo, el puntero del archivo avanza al siguiente elemento de datos. Por ejemplo, si lee un valor int usando readInt(), la JVM lee 4 bytes del puntero del archivo, y ahora el puntero del archivo es 4 bytes por delante de la ubicación anterior, como se muestra en la figura siguiente.

Image description

Para un RandomAccessFile raf, puede usar el método raf.seek(position) para mover el puntero del archivo a una posición específica. raf.seek(0) lo mueve al principio del archivo, y raf.seek(raf.length()) lo mueve al final del archivo. El siguiente código demuestra RandomAccessFile.

package demo;
import java.io.*;

public class TestRandomAccessFile {

    public static void main(String[] args) throws IOException {
        try( // Create a random access file
            RandomAccessFile inout = new RandomAccessFile("inout.dat", "rw");
        ) {
            // Clear the file to destroy the old contents if exists
            inout.setLength(0);

            // Write new integers to the file
            for(int i = 0; i 



La longitud del archivo actual es 800
El primer número es 0
El segundo número es 1
El décimo número es 9
La nueva longitud es 804
El undécimo número es 555

Se crea un RandomAccessFile para el archivo llamado inout.dat con modo rw para permitir operaciones de lectura y escritura en la línea 8.

inout.setLength(0) establece la longitud en 0 en la línea 11. Esto, en efecto, destruye el contenido antiguo del archivo.

El bucle for escribe valores 200 int desde 0 a 199 en el archivo en las líneas 14 y 15. Dado que cada [ El valor &&&]int ocupa 4 bytes, la longitud total del archivo devuelto por inout.length() ahora es 800 (línea 18), como se muestra en el resultado de muestra.

Invocar

inout.seek(0) en la línea 21 establece el puntero del archivo al principio del archivo. inout.readInt() lee el primer valor en la línea 22 y mueve el puntero del archivo al siguiente número. El segundo número se lee en la línea 26.

inout.seek(9 * 4) (línea 29) mueve el puntero del archivo al décimo número. inout.readInt() lee el décimo número y mueve el puntero del archivo al undécimo número en la línea 30. inout.write(555) escribe un nuevo undécimo número en la posición actual ( línea 33). El undécimo número anterior está destruido.

inout.seek(inout.length()) mueve el puntero del archivo al final del archivo (línea 36). inout.writeInt(999) escribe un 999 en el archivo (línea 37). Ahora la longitud del archivo aumenta en 4, por lo que inout.length() devuelve 804 (línea 40).

inout.seek(10 * 4) mueve el puntero del archivo al undécimo número en la línea 43. El nuevo undécimo número, 555, se muestra en la línea 44.

Declaración de liberación Este artículo se reproduce en: https://dev.to/paulike/random-access-files-1464?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3