Foros del Web » Programación para mayores de 30 ;) » Java »

Ficheros serializados

Estas en el tema de Ficheros serializados en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/02/2019, 23:11
 
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.
  #2 (permalink)  
Antiguo 22/02/2019, 04:43
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Ficheros serializados

haz un flush() antes del close().

para eliminar el fichero al finalizar

https://www.mkyong.com/java/how-to-delete-file-in-java/
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: ficheros, objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:51.