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

una duda sobre archivos

Estas en el tema de una duda sobre archivos en el foro de Java en Foros del Web. Cuando declaro el objeto para escribir/leer en el archivo hago lo siguiente ObjectOutputStream out= new ObjectOutputStream(new FileOutputStream("tasques.txt")); ObjectInputStream in= new ObjectInputStream(new FileInputStream("tasques.txt")); pero hasta ahora ...
  #1 (permalink)  
Antiguo 16/05/2007, 04:22
 
Fecha de Ingreso: febrero-2007
Mensajes: 172
Antigüedad: 17 años, 2 meses
Puntos: 0
una duda sobre archivos

Cuando declaro el objeto para escribir/leer en el archivo hago lo siguiente
ObjectOutputStream out= new ObjectOutputStream(new FileOutputStream("tasques.txt"));
ObjectInputStream in= new ObjectInputStream(new FileInputStream("tasques.txt"));

pero hasta ahora no me habia dado cuenta que cada vez que ejecuto el programa sobreescribe el archivo tasques.Borra lo que habia antes y escribe lo nuevo.
Como tendria que hacerlo para que al escribir vaya añadiendo lo nuevo al archivo sin borrar lo que habia guardado anteriormente?
Como veis ando muy perdido....
Gracias
  #2 (permalink)  
Antiguo 16/05/2007, 04:57
 
Fecha de Ingreso: mayo-2007
Mensajes: 11
Antigüedad: 17 años
Puntos: 0
Re: una duda sobre archivos

Dale un vistazo al API de Java la respuesta es muy sencilla:

Cita:
public FileOutputStream(File file,
boolean append)
throws FileNotFoundException

Creates a file output stream to write to the file represented by the specified File object. If the second argument is true, then bytes will be written to the end of the file rather than the beginning. A new FileDescriptor object is created to represent this file connection.

First, if there is a security manager, its checkWrite method is called with the path represented by the file argument as its argument.

If the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason then a FileNotFoundException is thrown.

Parameters:
file - the file to be opened for writing.
append - if true, then bytes will be written to the end of the file rather than the beginning
Throws:
FileNotFoundException - if the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason
SecurityException - if a security manager exists and its checkWrite method denies write access to the file.
Since:
1.4
See Also:
File.getPath(), SecurityException, SecurityManager.checkWrite(java.lang.String)
Traducido... cambia tu codigo por:

new ObjectOutputStream(new FileOutputStream("tasques.txt",true));
  #3 (permalink)  
Antiguo 16/05/2007, 10:53
 
Fecha de Ingreso: febrero-2007
Mensajes: 172
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: una duda sobre archivos

Gracias,parece que ahora funciona bien pero siempre me sale esto

Exception in thread "main" java.io.StreamCorruptedException
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at Client.main(Client.java:134)

como se soluciona?
  #4 (permalink)  
Antiguo 16/05/2007, 14:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: una duda sobre archivos

Si no recuerdo mal, con un ObjectOutputStream no puedes abrirlo para añadirle objetos al final, ya que cuando lo abres le pone unas cabeceras etc. que solo pueden ir al principio.
Si tienes que ir añadiendo sin volver a escribir lo anterior, puede que en tu caso los ObjectXStream no sean lo mas apropiado.

Un saludo
  #5 (permalink)  
Antiguo 16/05/2007, 17:14
 
Fecha de Ingreso: febrero-2007
Mensajes: 172
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: una duda sobre archivos

Y que seria lo mas apropiado entonces?
los objectXstream los utilizo porque un libro vi que era lo que se usaba para la serializacion de objetos
  #6 (permalink)  
Antiguo 16/05/2007, 22:54
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: una duda sobre archivos

Si, para serializar objetos se usan básicamente los objectXstream. Aunque las preguntas para determinar como tratar el caso serían más bien:
.- ¿Tendrá muchos datos el fichero?
.- ¿Se leen/modifican mucho los datos?
.- ¿Siempre se añaden al final los objetos?
.- ¿Cuando los lees los lees siempre todos?

Segun las respuestas puedes plantearte utilizar una BDD, una BDD orientada a objetos, seguir con los ficheros pero cambiando de estrategia...

Por ejemplo, si no hay muchos datos, una solución es guardar UN objeto en el fichero, que sea un List de todos los objetos que quieres. Para añadir uno, simplemente lees el objeto que los contiene a todos, añades el nuevo a la lista y vuelves a escribir la Lista, que ahora contendrá uno mas. Así lo re-escribes todo cada vez, pero el codigo es cortito, claro y no te dará problemas.

Claro que si tienes muuuchos datos, entonces quizá no sea buena solución.

Todo es hallar un equilibrio entre rendimiento y claridad del codigo, que luego mantener segun que cosas que se hicieron por rendimiento da muchos dolores de cabeza .

S!
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 11:39.