Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/02/2019, 23:11
pumi
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 1 mes
Puntos: 2
Ficheros serializados

Buenos días.
Estoy haciendo una práctica de Java de un curso en la que tengo que utilizar ficheros serializados. Una de las opciones que tengo que hacer es la de modificar un atributo de un objeto que se encuentra dentro del fichero serializado, para lo que utilizo el siguiente fragmento de código:
----------------------------------------------------------------------------------------------
static void actualizarUnidades(String miCodigo, int miCantidad)throws IOException, ClassNotFoundException{

producto losProductosGuardados = new producto();
File ficheroCopia = new File("productosCopia.dat");
File ficheroOriginal = new File("productos.dat");
try{

InputStream ficheroLectura = new FileInputStream("productos.dat");
InputStream bufferLectura = new BufferedInputStream(ficheroLectura);
ObjectInput lectura = new ObjectInputStream(bufferLectura);



//Recorremos el fichero buscando el registo indicado
losProductosGuardados=(producto)lectura.readObject ();
while(losProductosGuardados!=null){//while1

if(losProductosGuardados.getCodigo().contentEquals (miCodigo)){
losProductosGuardados.setCantidad(miCantidad);
}
escribirEnFichero(losProductosGuardados,"productos Copia.dat");

losProductosGuardados=(producto)lectura.readObject ();



}

}
catch(IOException e){

ficheroOriginal.delete();
ficheroCopia.renameTo(ficheroOriginal);
}catch (Exception e){
System.out.println(e.getMessage());
}

}
------------------------------------------------------------------------------------

Es decir, lo que quiero hacer es:
  • Recorrer el fichero original y copiar los datos de los objetos en otro fichero "copia". Cuando localizo el que quiero modificar, modifico el dato y después lo copio.
  • Una vez copiados todos los objetos al fichero copia, quiero eliminar el original y modificar el nombre del fichero copia con el nombre del original.
Bueno, pues lo que me pasa es que una vez leído el último objeto del fichero original, como estoy en un blucle, intenta leer el siguiente y como no existe, me salta una "IOException" en la que intento borrar el fichero original y modificar el nombre del fichero copia, pero el original no se borra, por lo que la copia no se puede renombrar.
He intentado hacer un "lectura.close()" en el tratamiento de la excepción po si tuviera que cerrar el fichero antes de borrarlo pero me da error y no lo puedo hacer. En fin, que ando desesperado porque no consigo hacerlo.
¿Alguna idea para poder modifiar datos de los objetos que están en un fichero serializado?.

Gracias y un saludo.