Archivos directos

Un archivo relativo (directo) consiste en una colección de registros de longitud fija almacenados uno al lado del otro en un dispositivo de almacenamiento de ...
193KB Größe 18 Downloads 94 vistas
PROGRAMACION I Archivos directos Un archivo relativo (directo) consiste en una colección de registros de longitud fija almacenados uno al lado del otro en un dispositivo de almacenamiento de acceso directo. Cada registro en un archivo de organización relativa se puede referir por medio de un número -entero- de dirección, el cual indica su distancia o desplazamiento desde el origen del archivo. Java considera al archivo una secuencia de bytes. Es importante establecer el tipo de datos de cada campo del registro lógico y el tamaño de cada registro. Las operaciones que se realizan con los archivos directos son: creación, altas, bajas , modificaciones, consultas.

Tamaño de campos 

 

 

Char - 2 bytes Int - 4 bytes String - tamaño del String + 2 bytes Double - 8 bytes Boolean - 1 byte

Clase Random Random define métodos para facilitar proceso de archivos de acceso directo.  Crea el objeto ligado al archivo que se pasa como 1º parámetro, el 2º parámetro es el modo de apertura, lectura(r) o lectura/escritura(rw). Métodos  getFilePointer() posicion actual del puntero del archivo.  Seek() desplaza el puntero n bytes tomando como origen el byte 0.  Length() tamaño actual del archivo 

Métodos de acceso

a) Método mapeo directo Cuando la clave = numero de registro. Ejemplos para posicionar en el registro  Tamreg*(clave -1)  Tamreg*clave –tamreg b) Metodo del residuo  (Clave%divisor)+1  El divisor es un numero primo inmediatamente menor o mayor al total de registros del archivo.  El residuo es el numero hash buscado.

// la Clase de registro del archivo import java.io.*; public class Libro{ private int cod_Lib;// tamaño 4 private string titulo;//tamaño 40+2(se guarda la longitud de la cadena) private int cantidad;//tamaño 4 private boolean estado; // tamaño 1 private int MAXARCHIVO = 100; // constante que indica la máxima cantidad de registros que va a tener el archivo private final int TAMREG = 51; // constante cuyo valor es el tamaño de cada registro (51= 4 + 42 + 4 + 1) public libro(){;} // constructor de la clase, en este caso no realiza ninguna acción // este metodo asigna los valores a recibe como parámetro a los atributos correspondientes

// primero se posiciona según el valor del código, y luego agrega un registro al archivo que recibe como parámetro public void agregarReg(RandomAccessFile archi)throws IOException{ archi.seek(posicionarEnReg(codLibro)) ; archi.writeInt(codLibro); archi.writeUTF(titulo); archi.writeInt(cantidad); archi.writeBoolean(estado); } // calcula y retorna el inicio del numero de registro que recibe como parámetro public int posicionarEnReg(int cod) { return(TAMREG*(cod-1)); } // asigna a cada atributo los valores que lee del archivo que recibe como parámetro public void leerReg(RandomAccessFile archi)throws IOException{ codLibro = archi.readInt(); titulo = archi.readUTF(); cantidad = archi.readInt(); estado = archi.readBoolean(); }

// calcula y retorna una cadena de longitud "c", en el caso de ser mas larga que el valor de "c" lo corta, en el caso de ser mas corta rellena los espacios faltantes con blancos public String ajustarString(String s, int c) { if(s.length() > c) { s = s.substring(0,c); } else { int i = s.length(); while(i