Estoy realizando un ejercicio (supongo que muy típico) de gestionar datos de lectura/escritura de objetos en un fichero. Tengo un JTabPane de tres pestañas: una para grabar datos de la persona al fichero, otra para leerlos y otra con una tabla para mostrar todos los objetos persona del fichero. He creado una clase "Persona" donde van los atributos (nombre, dirección, edad...) los getters y setters y un override del ToString.
La fase de grabar personas en el fichero la tengo hecha y funciona. La fase de leer la tengo "casi". Y ese "casi" me está matando. El código que tengo lee los objetos persona del fichero, los mete en un ArrayList y luego le he metido una salida del string por consola para comprobar si funcionaba (y sí, funciona). El problema viene al intentar rellenar los JTextField con los strings. El código no peta pero no saca nada de nada en los JTextFields. Ahí va el código de la función de lectura. ¡Ah! Programo con NetBeans 7.1.1
Código:
La clase Personaprivate void leerPersonas() throws IOException, ClassNotFoundException { Persona persona; FileInputStream fichero; ArrayList<Persona>listaPersonas=new ArrayList<Persona>(); //Si el fichero NO existe se lanza una excepción. //Acceso al fichero -> Abrir para leer (secuencialmente). fichero = new FileInputStream(".\\src\\gestionarPersonas\\Datos\\Personas.dat"); //Para tener acceso a los métodos de leer objetos //(serialización) en el fichero. //Leer los datos de la 1ª Persona (leer un Object). //persona = (Persona) leer.readObject(); //Lectura secuencial de todos los registros. //El readObject avanza el puntero al siguiente registro. int i=0; while ((persona = (Persona) new ObjectInputStream(fichero).readObject()) != null) { listaPersonas.add(persona); //Comprobación por consola System.out.println(listaPersonas.get(i).toString()); i+=1; } //Rellenado de los TextFields de la segunda pestaña con la primera persona //dentro del //ArrayList (posición 0) //WARNING! HOUSTON, TENEMOS UN PROBLEMA txtNombre2.setText(listaPersonas.get(0).getNombre()); txtTelf2.setText(listaPersonas.get(0).getTelefono()); txtDireccion2.setText(listaPersonas.get(0).getDireccion()); txtEdad.setText(String.valueOf(listaPersonas.get(0).getEdad())); txtApellidos.setText(listaPersonas.get(0).getApellidos()); //Cerrar el fichero. fichero.close(); }
Código:
Muchas gracias por adelantado! import java.io.Serializable; public class Persona implements Serializable { //Es un número ID que permite comprobar si los datos grabados, //al ser recuperados, coinciden con la última versión //de la clase Persona. //TODO Cambiar la estructura de datos (atributos) de //la clase Persona y ver el tema del serial ID. private static final long serialVersionUID = 5227260147142969242L; //--- Atributos/propiedades de la clase --- //Concepto de encapsular o no dejar acceso directo. private String nombre; private String apellidos; private String telefono; private String direccion; private int edad; public Persona(String nombre, String apellidos, String telefono, String direccion, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.telefono = telefono; this.direccion = direccion; this.setEdad(edad); } //--- Los métodos accesores (getters y setters) --- public String getNombre() { return nombre; //return nombre.toUpperCase(); } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellidos() { return apellidos; //return apellidos.toUpperCase(); } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public String getTelefono() { return telefono; } public void setTelefono(String telefono) { this.telefono = telefono; } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } //--- Métodos propios de la clase --- public String toString() { return (this.getClass().getName() + " - " + this.apellidos + ", " + this.nombre + " (" + this.edad + ")"); } }