UNIDAD 6: JAVA REGISTROS Y ARCHIVOS DIRECTOS
TEMA 8: JAVA EDICION MODIFICACION DE REGISTROS
Modificar o editar un registro es uno de los procesos mas comunes con archivos en disco, generalmente despues de un fuerte proceso de captura de registros, una revisión o consulta general muestra muchos de ellos con errores de captura.
La primera parte del programa es el programa normal de busqueda que ya se construyo en temas anteriores, pero al desplegar el registro se debera construir de preferencia un switch() (tarea) que incluya los datos a modificar del registro.
La segunda parte del programa toma los datos, los almacena en el registro en memoria luego se posiciona en el registro en disco a modificar con seek() y se regraban con write().
Prog35.java
import java.lang.*;
import java.io.*;
class prog35 {
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;
long tregistro=58;
// creando objeto teclado y capturando clave
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("dame clave editar: ");
clave = Integer.parseInt(teclado.readLine());
} catch(IOException ioe) { System.out.println(ioe); }
// abriendo archivo, leyendo
try {
File arch=new File("c:\\ajava\\archivo2.dat");
RandomAccessFile archivo=new RandomAccessFile(arch,"rw");
archivo.seek(clave * tregistro);
clave=archivo.readInt();
//leyendo string
for(int i = 0; i < 25; ++i)
{ nombre += archivo.readChar(); };
edad=archivo.readInt();
//desplegando registro viejo
System.out.println(clave+" "+nombre+" "+edad);
System.out.print("NUEVO 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.print("NUEVA EDAD: ");
edad = Integer.parseInt(teclado.readLine());
// regresando apuntado y regrabando
archivo.seek( archivo.getFilePointer() -tregistro);
archivo.writeInt(clave);
archivo.writeChars(nombre);
archivo.writeInt(edad);
nombre="";
archivo.close();
} catch(FileNotFoundException fnfe) { }
catch (IOException ioe) { }
} // cierra main
} // cierra clase
Corrida
La unica instrucción nueva en este tema es getfilepointer() que se usa para conocer el byte o posición donde se encuentra actualmente el apuntador o puntero interno del archivo, recordar que cuando se leyo el registro en el proceso de busqueda el apuntador interno se movio hasta el fin del registro por eso cuando se quiere regrabar de nuevo se uso un seek(pointer - tregistro) para regresarse al principio del registro y regrabar.
TAREAS PROGRAMACION JAVA
CONSTRUIRLES PROGRAMAS DE EDICION O MODIFICACION A LOS ARCHIVOS YA CONSTRUIDOS.