UNIDAD 6: JAVA REGISTROS Y ARCHIVOS DIRECTOS

TEMA 3: GRABACION Y LECTURA DISCO JAVA


Como ya se menciono grabar y lectura de registros o estructuras a renglones o registros de archivos en disco.

Estos dos procesos son los casos mas comunes y frecuentes que se pueden realizar con un archivo de disco.

GRABACION DE UNA ESTRUCTURA A UN ARCHIVO EN DISCO

Prog30.java


import java.lang.*;

import java.io.*;

class prog30 {

public static void main(String[] args) {

// creando e inicializando los campos del registro

// observar que se debe usar clases numericas apropiadas

int clave=0;

String nombre="";

int edad=0;

// creando objeto teclado

BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));

// abriendo archivo, capturando y grabando datos

try {

//* Creando y grabando a un archivo, esta larga la instrucción*/

File arch=new File("c:\\ajava\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

System.out.println("dame clave: ");

clave = Integer.parseInt(teclado.readLine());

System.out.println("dame nombre: ");

nombre=teclado.readLine();

//dejando string en 25 caracteres

if (nombre.length() < 25)

{ for(int i=nombre.length(); i <25; i++)

nombre=nombre+" ";}

else{ nombre=nombre.substring(0,25); };

System.out.println("dame edad: ");

edad = Integer.parseInt(teclado.readLine());

// grabando al archivo

if (archivo.length()!= 0){archivo.seek( archivo.length() );};

archivo.writeInt(clave);

// y recordar que cada caracter se graba en dos bytes

archivo.writeChars(nombre);

archivo.writeInt(edad);

archivo.close();

}

catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }

catch (IOException ioe) { /* Error al escribir */ }

} // cierra main

} // cierra clase

corrida:

image188.jpg

Observar que es completamente similar a programa de archivos secuenciales, solo se recomienda que las claves sigan la secuencia 0,1,2,3,4,5…..

La primera observación es que se esta usando el modo “rw”, reestudiar la clase de modos de apertura.

Recordar que un archivo directo tiene un tamaño de registro predifinido y es importante qu dicho tamaño se respete, para el caso de las variables strings dentro del codigo se estan ajustando a 25 caracteres, si la string es mas corta que dicho tamaño se tendra que ampliar con caracteres en blanco ” ”, si el tamaño es mas grande la string se tendra que recortar con el metodo substring(), como se muestra en el programa ejemplo.

Tambien es importante recordar que java grabara cada caracter de la string usando dos(2) bites en disco, es decir el registro ejemplo quedara grabado en disco en 58 BYTES, 50 para la string y 4 bytes por cada entero, es importante conocer el tamaño de registros grabados en disco porque esta información se usara ampliamente en el resto de los programas de esta unidad.

Las metodos de grabación que se estan usando son:

Archivo.writeInt() y archivo.writeChars().

Recordar estudiar todos los metodos de la clase RANDOMACCESSFILE.

LECTURA CONSULTA DESPLIEGUE DE REGISTROS

prog31.java


import java.lang.*;

import java.io.*;

class prog31 {

public static void main(String[] args) {

// creando e inicializando los campos del registro

// observar que se debe usar clases numericas apropiadas

int clave=0;

String nombre="";

int edad=0;

//recordar que un caracter son dos bytes en archivo

long tregistro=58;

long cregistros=0;

// creando objeto teclado

BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));

// abriendo archivo, capturando y grabando datos

try {

//* Creando y leyendo archivo, esta larga la instrucción*/

File arch=new File("c:\\ajava\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

//calulando cantidad de registros

cregistros=archivo.length()/tregistro;

for (int r=0; r < cregistros; r++)

{

clave=archivo.readInt();

//leyendo string

for(int i = 0; i < 25; ++i)

{ nombre += archivo.readChar(); };

edad=archivo.readInt();

//desplegando

System.out.println(clave+" "+nombre+" "+edad);

// limpiar strings o java encadena con la siguiente

nombre="";

};

archivo.close();

}

catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }

catch (IOException ioe) { /* Error al escribir */ }

} // cierra main

} // cierra clase

corrida:

image189.jpg

notas:

Primero se ocupa conocer la cantidad de registros que se encuentran almacenados en disco, para esto primero se ocupan dos variables de tipo long tregistro y cregistros, la cantidad de registros se obtiene con la operación y metodos de la clase RANDOMACCESSFILE siguientes:

cregistros=archivo.length()/tregistro;

Creo que esta muy claramente entendible, como se obtuvo la cantidad de registros, ya con esta información se construye un ciclo for (puede ser cualquiera de los ciclos vistos) para empezar a recorrer renglon tras renglon del archivo directo.

La unica nota a mencionar es que para leer la string se esta usando un ciclo de lectura de 25 caracteres y recordar al final poner la string en nada =”” porque si no en la siguiente lectura se tendra una string encadenada a la siguiente string.

TAREAS PROGRAMACION JAVA

1.- Cargar y Leer los archivos pedidos en el tema anterior.

 


 


Driven by DokuWiki

Politica de Privacidad