Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivos: Mostrar que los archivos tambin se pueden accesar en forma no secuencial y
que esto es til para no tener que visitar completamente archivos de gran tamao.
Temas:
La clase RandomAccessFile.
Para que un archivo se pueda accesar cmodamente en forma directa, es necesario que sus
lneas tengan un nmero fijo de caracteres. Por esta razn, los archivos de acceso directo
que usaremos en los ejemplos, tendrn la extensin ".raf". Lamentablemente, estos archivos
no pueden ser vistos mediante WordPad o NotePad porque su contenido no es
necesariamente desplegable en pantalla.
Construye un lector/escritor de
acceso directo para post.raf
PostRAF(String arch)
praf.escribir(50, post2);
int tamao
praf.close();
Cierra el archivo
void close()
postRaf.close();
lect.close();
escr.close();
Suponiendo que el archivo post.raf est ordenado por carnet, la funcin buscar puede
realizar una bsqueda binaria:
Post buscar(String ci, PostRAF postRaf) {
int imin= 0;
int imax= postRaf.tamao()-1;
while (imin<=imax) {
int icentro= (imin+imax)/2;
Post post= postRaf.leer(icentro);
int comp= compare(ci, post.ci)
if (comp==0)
return post;
else if (comp<0)
imax= icentro-1;
else
imin= icentro+1;
}
return null;
}
La clase RandomAccessFile
La clase RandomAccessFile permite accesar archivos en forma directa. Esta clase permite
ver un archivo como un arreglo de caracteres y leer o escribir zonas del arreglo. Como lo
indica la siguiente figura, cada caracter se subindica mediante un ndice.
Existe un puntero nico que indica la posicin del archivo que se accesar en la prxima
operacin de lectura o escritura.
La siguiente tabla resume los mtodos principales de la clase:
Ejemplo
RandomAccessFile raf= new
RandomAccessFile("arch.raf", "r");
Significado
Construye un lector
para arch.raf.
Construye un
RandomAccessFile raf2= new
lector/escritor para
RandomAccessFile("arch.raf", "rw");
arch.raf.
raf2.writeUTF("hola");
Declaracin
RandomAccessFile(String
nom, String modo)
RandomAccessFile(String
nom, String modo)
Escribe "hola" en
formato UTF a partir void writeUTF(String s)
de la posicin actual
String s= raf1.readUTF();
Lee un string en
formato UTF a partir String readUTF()
de la posicin actual
raf1.seek(30);
Cambia la posicin
actual del puntero al
ndice 30
Entrega el tamao
actual del archivo
int length()
raf.close();
Cierra el archivo
void close()
Del mismo modo, la operacin readUTF determina el largo del string que se va a leer a
partir de los dos primeros bytes (desde la posicin actual):