• Lunes 23 de Diciembre de 2024, 13:52

Autor Tema:  Escribir un Objeto al final de un fichero  (Leído 7054 veces)

turicuen

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Escribir un Objeto al final de un fichero
« en: Sábado 30 de Agosto de 2008, 21:12 »
0
Me gustaria saber como puedo escribir un objeto dentro de un fichero sin sobreescribir este.

Si el fichero  no esta creado escribo de esta forma
Código:

 
Código: Text
  1. ObjectOutputStream f = new ObjectOutputStream(new FileOutputStream("Nombre_Fichero"));
  2.  ous.writeObject(Objeto_a_escribir);
  3.  


Ahora como lo hago para no sobreescribir el fichero, para no perder los objetos que estan dentro.

manix

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Re: Escribir un Objeto al final de un fichero
« Respuesta #1 en: Sábado 30 de Agosto de 2008, 21:29 »
0
hola
intenta pasando un true como segundo parametro en en constructor de ObjectOutputStream

Código: Java
  1. ObjectOutputStream f = new ObjectOutputStream(new FileOutputStream("Nombre_Fichero"), true);
  2.  

saludos

turicuen

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Escribir un Objeto al final de un fichero
« Respuesta #2 en: Sábado 30 de Agosto de 2008, 23:06 »
0
Si, pero no me vale, si pongo append a true,me inserta el objeto al final del fichero. Pero luego cuando abro el fichero para recorrerlo y obterner un objeto me da error. Me saca el objeto del fichero pero me muestra la siguiente excepcion

Código: Text
  1. java.io.StreamCorruptedException: invalid type code: AC
  2.         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356)
  3.  

turicuen

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Escribir un Objeto al final de un fichero
« Respuesta #3 en: Domingo 31 de Agosto de 2008, 14:08 »
0
Creo que es debido a que cada vez que añado inserto objetos al fichero ya creado, tambien escribe informacion adicional sobre el fichero. Y luego al leer el fichero, esa informacion adicional hace que me salte la excepcion.

He leido por ahi que una solucion cutre, pero que muy cutre y muy chapa. Que es hacer un reset cada vez que escribo, o antes de escribir eso no me ha quedado muy claro.

chuidiang

  • Miembro MUY activo
  • ***
  • Mensajes: 123
  • Nacionalidad: es
    • Ver Perfil
    • http://www.chuidiang.com
Re: Escribir un Objeto al final de un fichero
« Respuesta #4 en: Domingo 31 de Agosto de 2008, 19:05 »
0
Hola:

Aquí tienes un par mas de posibles soluciones para añadir objetos al final de fichero.

Se bueno.

turicuen

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Escribir un Objeto al final de un fichero
« Respuesta #5 en: Lunes 1 de Septiembre de 2008, 12:26 »
0
Gracias lo probare!!

turicuen

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Escribir un Objeto al final de un fichero
« Respuesta #6 en: Lunes 1 de Septiembre de 2008, 17:56 »
0
No me escribe el objeto. Cuando lo añado no me lo escribe!!. Si hago writeUn


Código: Text
  1.  public void anhadeFichero ()
  2.     {
  3.         try {            
  4.             MiObjectOutputStream oos = new MiObjectOutputStream( new FileOutputStream("fichero.txt",true));
  5.              Persona p = new Persona("Pepe","....",25);//X ejemplo
  6.              oos.writeUnshared(p);
  7.             oos.close();
  8.             System.out.println("se ha escrito correctamente");
  9.         } catch (Exception e){
  10.                 e.printStackTrace();
  11.            }
  12.     }
  13.  
No me da ningun tipo de error, y me sale que se ha escrito correctamente, pero luego cuando leo el archivo, no aparece, estan solamente los archivos con los que lo cree.

chuidiang

  • Miembro MUY activo
  • ***
  • Mensajes: 123
  • Nacionalidad: es
    • Ver Perfil
    • http://www.chuidiang.com
Re: Escribir un Objeto al final de un fichero
« Respuesta #7 en: Lunes 1 de Septiembre de 2008, 21:36 »
0
Hola:

¿El fichero aumenta de tamaño en la segunda ejecución?. Ten en cuenta que al ejecutar el programa dos veces, estás escribiendo dos veces las mismas personas, por lo que una misma persona aparece "teóricamente" dos veces en el fichero. ¿Es posible que el problema esté en el programa que lee, ya que lee dos veces la misma clase Persona?

Se bueno.

manix

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Re: Escribir un Objeto al final de un fichero
« Respuesta #8 en: Lunes 1 de Septiembre de 2008, 23:51 »
0
hola!!

precisamente presta atencion a lo que dice chuidiang, he probado el ejemplo completo y corre perfecto.

saludos

turicuen

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Escribir un Objeto al final de un fichero
« Respuesta #9 en: Martes 2 de Septiembre de 2008, 20:46 »
0
Al archivo si me añade el objeto, pero me sigue insertando una cabezara en el archivo cada vez que inserto un objeto. Y el codigo es el que tengo puesto mas arriba.

La unica forma con la que no me falla y me lo intruduce bien, es haciendo un reset antes de cada escritura.

Código: Text
  1. #  public void anhadeFichero ()
  2.      {
  3.          try {            
  4.              MiObjectOutputStream oos = new MiObjectOutputStream( new FileOutputStream("fichero.txt",true));
  5.               Persona p = new Persona("Pepe","....",25);//X ejemplo
  6.               oos.reset();
  7.               oos.writeUnshared(p);
  8.              oos.close();
  9.              System.out.println("se ha escrito correctamente");
  10.          } catch (Exception e){
  11.                  e.printStackTrace();
  12.          
  13.  

Lo unico que no me parece demasiado correcto dejarlo asi, alguna solucion?