Me guié de un vídeo para aprender el tema de Serialización en Java. En el que tenemos una clase Contacto que implementa la interfaz Serializable con los atributos Nombre y Apellido y sus respectivos getters y setters.
Clase Contacto:
Tengo la clase Serializador que tiene los métodos para escribir un archivo y leer un archivo.
Clase Serializador:
Y la clase Main para serializar un objeto de tipo Contacto y después leerlo
Clase Main:
Mi pregunta es ¿cómo puedo leer del archivo la información (en este caso nombre y apellido) de ambos contactos?
Así como está ahora, solo me imprime los datos del último objecto que se serializo, que se guardó en el archivo, que en este caso es el "Contacto prima". Yo quiero poder imprimir ambos nombres y apellidos o elegir cuando quiero imprimir lo del "Contacto yo" o los del "Contacto prima"
Clase Contacto:
Código (java) [Seleccionar]
// El objeto que voy a serializar (en este caso Contacto) debe implementar la interfaz Serializable.
import java.io.*;
public class Contacto implements Serializable{
private String nombre;
private String apellido;
public Contacto(String nombre, String apellido){
this.nombre = nombre;
this.apellido = apellido;
}
public String getNombre(){
return this.nombre;
}
public String getApellido(){
return this.apellido;
}
public void setNombre(String n){
this.nombre = n;
}
public void setApellido(String a){
this.apellido = a;
}
public String toString(){
return this.getApellido() +" "+ this.getNombre();
}
}
Tengo la clase Serializador que tiene los métodos para escribir un archivo y leer un archivo.
Clase Serializador:
Código (java) [Seleccionar]
import java.io.*;
public class Serializador{
// Escribe un objecto en un archivo
private ObjectOutputStream escritorArchivo;
// Lee un objecto que este guardado en un archivo
private ObjectInputStream lectorArchivo;
// Al metodo le pasamos el objeto que queremos serializar y lo guardará en el archivo que se le especifique al FileOutputStream (en este caso "objeto.mio")
public void escribirArchivo(Object objeto){
try{
escritorArchivo = new ObjectOutputStream(new FileOutputStream("objeto.mio"));
escritorArchivo.writeObject(objeto);
} catch(FileNotFoundException fnfex){
fnfex.printStackTrace();
} catch(IOException ioex){
ioex.printStackTrace();
}
}
public Object leerArchivo(String rutaArchivo){
Object lectura = null;
try{
lectorArchivo = new ObjectInputStream(new FileInputStream(rutaArchivo));
lectura = lectorArchivo.readObject();
} catch(FileNotFoundException fnfex){
fnfex.printStackTrace();
} catch(IOException ioex){
ioex.printStackTrace();
} catch(ClassNotFoundException cnfex){
cnfex.printStackTrace();
}
return lectura;
}
}
Y la clase Main para serializar un objeto de tipo Contacto y después leerlo
Clase Main:
Código (java) [Seleccionar]
public class Main{
public static void main(String[] args){
Serializador ser = new Serializador();
Contacto yo = new Contacto("Gustavo","Diaz");
Contacto prima = new Contacto("Madeline","Guzman");
ser.escribirArchivo(yo);
ser.escribirArchivo(prima);
Contacto contacto = (Contacto) ser.leerArchivo("objeto.mio");
System.out.println(contacto.getNombre());
System.out.println(contacto.getApellido());
}
}
Mi pregunta es ¿cómo puedo leer del archivo la información (en este caso nombre y apellido) de ambos contactos?
Así como está ahora, solo me imprime los datos del último objecto que se serializo, que se guardó en el archivo, que en este caso es el "Contacto prima". Yo quiero poder imprimir ambos nombres y apellidos o elegir cuando quiero imprimir lo del "Contacto yo" o los del "Contacto prima"