Espero y me puedan ayudar, estoy trabajando con archivos binarios, y en la modificación estoy que no puedo avanzar, en teoría yo diría que debería estar bien.
lo que hago es lo siguiente:
- creo otro archivo, pido la matricula que voy a modificar, entonces copio todo del archivo "original" al nuevo excepto el que quiero modificar, entonces pido los nuevo datos, los agrego, borro el original, cambio nombre del segundo archivo.
El error debe de estar en mi código (supongo), ya he pedido ayuda a compañeros pero nadie me dice nada mas de un "debería de funcionar así" y pues la verdad es que ya no encuentro que hacer, espero que me puedan ayudar, gracias.
Mi código de modificación es el siguiente:
Código:
public void modificarRegistro(BufferedReader entrada) throws IOException{
archivo=new File("temp");
grabar=new DataOutputStream(new FileOutputStream("texto.txt",true));
leer=new DataInputStream(new FileInputStream("texto.txt"));
grabar2 =new DataOutputStream(new FileOutputStream("temp",true));
int matriculab;
System.out.println("Matricula a buscar");
matriculab=3;
String nombre;
try{
while((nombre=leer.readUTF())!=null){
int mat=leer.readInt();
float c1=leer.readFloat();
float c2=leer.readFloat();
float prom=leer.readFloat();
if(matriculab==mat){
}
else{
obj.setNombre(entrada.readLine());
obj.setMatricula(Integer.parseInt(entrada.readLine()));
obj.setCalificacion1(Float.parseFloat(entrada.readLine()));
obj.setCalificacion2(Float.parseFloat(entrada.readLine()));
obj.setPromedio((obj.getCalificacion1()+obj.getCalificacion2())/2);
grabar2.writeUTF(obj.getNombre());
grabar2.writeInt(obj.getMatricula());
grabar2.writeFloat(obj.getCalificacion1());
grabar2.writeFloat(obj.getCalificacion2());
grabar2.writeFloat(obj.getPromedio());
}
}
System.out.println("Nuevo nombre del Alumno: ");
obj.setNombre(entrada.readLine());
System.out.println("Nueva Matricula: ");
obj.setMatricula(Integer.parseInt(entrada.readLine()));
System.out.println("Nueva Calificación 1: ");
obj.setCalificacion1(Float.parseFloat(entrada.readLine()));
System.out.println("Nueva Calificación 2: ");
obj.setCalificacion2(Float.parseFloat(entrada.readLine()));
obj.setPromedio((obj.getCalificacion1()*obj.getCalificacion2())/2);
//escritura en archivo
grabar2.writeUTF(obj.getNombre());
grabar2.writeInt(obj.getMatricula());
grabar2.writeFloat(obj.getCalificacion1());
grabar2.writeFloat(obj.getCalificacion2());
grabar2.writeFloat(obj.getPromedio());
grabar2.close();
archivo.delete();
archivo2.renameTo(archivo);
leer.close();
leer2.close();
grabar.close();
grabar2.close();
}catch(IOException err){
System.out.println("Error");
}
}
Utilizando el ciclo while(true) me marca error en el NetBeans que solo logre resolver utilizando el ciclo "while((nombre=leer.readUTF())!=null)"