Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/11/2010, 00:38
Avatar de Luposz
Luposz
 
Fecha de Ingreso: agosto-2005
Mensajes: 12
Antigüedad: 18 años, 8 meses
Puntos: 0
Problema con Lectura/Escritura de Objetos en Archivos

Saludos
Vengo otra vez a incomodar con mis dudas >_<

Lo que hace mi programa es lo siguiente...
Mediante una interfaz gráfica tomo los datos de un usuario y los escribe a un txt
(Estoy usando Serializable, estoy escribiendo objetos heredados de CPersona).
Pero para crearlo tengo un Frame primero con 2 opciones, Añadir Usuario y otro que es Buscar, cada vez que le doy clic a Añadir se crea un nuevo objeto y así.

Los escribe supuestamente bien, entonces al momento que quiero recuperar los datos solo el primero me lo muestra, luego me marca un error, exactamente en este segmento

Código:
catch(IOException e)
		{
			e.printStackTrace(System.err);
			JOptionPane.showMessageDialog(null,"Error de salida "+ objCuenta);
		}
Sale con un 1, que quiere decir que solo se alcanzo a leer un objeto

Mi profesor dice que es porqué estoy guardando algo que no es un objeto en el archivo, pero ya revise mi programa y no encuentro el error.

Este es el método que escribe en el archivo

Código:
public void Escribir(CPersona Obj)
					{
						ObjectOutputStream ObjSalida = null;
						try
						{
							ObjSalida = new ObjectOutputStream 
							(
								new BufferedOutputStream 
								(
									new FileOutputStream ("/media/ERKREZER/Trabajadores.txt", true)
								)
							);
						ObjSalida.writeObject(Obj);
						//System.out.print (Obj.toString());
						}
						catch (IOException e)
						{
							e.printStackTrace(System.err);
							JOptionPane.showMessageDialog(null, "No se pudieron escribir los datos");
						}
						
						try
						{
							ObjSalida.close();
						}
						catch (IOException e)
						{
							e.printStackTrace(System.err);
							JOptionPane.showMessageDialog(null, "No se pudieron escribir los datos2");
						}
						
						JOptionPane.showMessageDialog(null, "Aniadido satisfactoriamente");
						Ventana1.hide();
					}
Y este el encargado de mostrar los escritos en el archivo

Código:
public static void Buscar()
	{
		ObjectInputStream ObjEntrada = null;
		int objCuenta = 0;
		CPersona Obj = null;
		
		try 
		{
			ObjEntrada = new ObjectInputStream 
			(
					new BufferedInputStream
					(
							new FileInputStream ("/media/ERKREZER/Trabajadores.txt")
					)
			);
			
			while (true)
			{
				Obj = (CPersona)ObjEntrada.readObject();
				objCuenta++;
				Resultados.setText(Obj+"");
			}
			
		}
		catch (ClassNotFoundException e)
		{
			e.printStackTrace(System.err);
			JOptionPane.showMessageDialog(null, "Error, no se puede leer");
		}
		catch (EOFException e)
		{
			System.out.println("Fin de archivo alcanzado");
		}
		catch(IOException e)
		{
			e.printStackTrace(System.err);
			JOptionPane.showMessageDialog(null,"Error de salida "+ objCuenta);
		}
		
		try
		{
			ObjEntrada.close();
		}
		catch(IOException e)
		{
			e.printStackTrace(System.err);
			JOptionPane.showMessageDialog(null,"Error");
		}
	}
El método toString lo tengo definido en la clase CPersona de esta manera:

Código:
public String toString() 
	{
		StringBuffer strBuf = new StringBuffer();
		strBuf.append("Nombre: " + getNombre()).append("\nCorreo: " 
						+ getCorreo()).append("\nPuesto: " + getPuesto()).append("\nFecha de Nacimiento: " 
						+ Fecha.getFecha()).append("\nNo. Usuario: " 
						+ String.valueOf(Numero) + '\n');
		
		return strBuf.toString();
	}
Use como guía el libro de Horton, y según yo estoy utilizando lo mismo pero no encuentro el problema... Estaría muy agradecido si me guiaran por el camino correcto

Gracias =D