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