Java RandomAccessFile especifica la ubicación para implementar la lectura y la redacción de archivos
RandomAccessfile pertenece a la clase de lectura aleatoria. Puede operar el contenido del archivo en sí al azar y puede leer y escribir contenido en la ubicación especificada del archivo, que es muy conveniente en muchos casos.
RandomAccessFile se usa para acceder a archivos que contienen registros de datos. Puede usar el método Seek () para acceder a los registros y leer y escribir. El tamaño de estos registros no tiene que ser el mismo; Sin embargo, se debe conocer su tamaño y posición. Sin embargo, esta clase se limita a los archivos operativos.
RandomAccessFile no pertenece a las clases InputStream y OutputStream. De hecho, además de implementar las interfaces DataAnput y DataOutput (DataInputStream y DataOutputStream también implementan estas dos interfaces), no tiene nada que ver con estas dos clases, y ni siquiera usa ninguna función que ya existan en las clases InputStream y OutputStream; Es una clase completamente independiente, y todos los métodos (en su mayoría pertenecen a sí mismo) se escriben desde cero. Esto puede deberse a que RandomAccessFile puede moverse de un lado a otro en el archivo, por lo que su comportamiento es algo fundamentalmente diferente de otras clases de E/S. En resumen, es una clase separada que hereda directamente el objeto.
Básicamente, la forma de funcionamiento de RandomAccessFile es combinar DataAnputStream y DataOutputStream, y agregar algunos de sus propios métodos, como getFilePointer () para posicionar, buscar () para moverse en el archivo y determinar la longitud () para el tamaño del archivo y skipbytes () para skip. Además, su constructor también tiene un parámetro que indica si abrir el archivo en modo de solo lectura ("R") o el modo de lectura-escritura ("RW") (exactamente lo mismo que el Fopen () de C). No admite escribir solo archivos.
Solo RandomAccessFile tiene un método de búsqueda de búsqueda, y este método solo es aplicable a los archivos. BufferedInputStream tiene un método Mark (), que puede usar para establecer la marca (guarde el resultado en una variable interna), y luego llame a RESET () para volver a esta posición, pero su función es demasiado débil y no muy práctica.
Código de ejemplo:
import java.io.ioException; import java.io.randomaccessfile;/** * randomAccessfile pertenece a una clase de lectura aleatoria y puede operar el contenido del archivo en sí mismo directamente y aleatoriamente, es decir, puede especificar la ubicación * para leer y escribir contenido * @author andy * */public class RandomAtAccessfiletest {public static void Main (string args [] Args [] @author y ioexty * */public class RandomAtAccessfiletest {Public static Main (String args [] Args []. escribir(); leer(); } public static void write () lanza ioexception {// Acceda al archivo de manera lectura-escritura randomAtAccessFile raf = new RandomAccessFile ("d: //test.txt", "rw"); raf.writytes ("¡Hola mundo!"); raf.Writeboolean (verdadero); Raf.Writeint (30); RAF.WRITEDULL (3.56); raf.close (); } public static void read () lanza ioexception {randomAccessFile raf = new RandomAccessFile ("d: //test.txt", "r"); raf.seek (12); // Establezca la posición del puntero boolean booleanValue = raf.readBoolean (); int intValue = raf.readInt (); double doubleValue = raf.readdouble (); raf.seek (0); // Establezca la posición del puntero al comienzo del archivo byte [] bytes = new byte [12]; for (int i = 0; i <bytes.length; i ++) bytes [i] = raf.readbyte (); // Leer un byte a la vez y asignarlo a bytes [i] string stringValue = new String (bytes); raf.skipbytes (1); // omita un byte byte int intValue2 = raf.readInt (); raf.close (); System.out.println (booleanValue); System.out.println (intValue); System.out.println (DoubleValue); System.out.println (stringValue); System.out.println (intValue2); }}Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!