En esta ocasión veremos el tema de Persistencia de datos con xml y para el caso usaremos la clase XMLEncoder del paquete java.beans.XMLEncoder, que nos permite serializar diferentes tipos de datos sean primitivos o de objetos y que nos será de gran utilidad para ocaciones donde necesitemos almacenar datos con su estructura completa (valor y tipo de dato).
Crearemos un bean llamado
Usuario y tendrá los siguientes atributos: nombre,apellido,edad,correo.
quedando así
public class Usuario {
private String nombre;
private String apellido;
private int edad;
private String correo;
/**
* @return the nombre
*/
public String getNombre() {
return nombre;
}
/**
* @param nombre the nombre to set
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* @return the apellido
*/
public String getApellido() {
return apellido;
}
/**
* @param apellido the apellido to set
*/
public void setApellido(String apellido) {
this.apellido = apellido;
}
/**
* @return the edad
*/
public int getEdad() {
return edad;
}
/**
* @param edad the edad to set
*/
public void setEdad(int edad) {
this.edad = edad;
}
/**
* @return the correo
*/
public String getCorreo() {
return correo;
}
/**
* @param correo the correo to set
*/
public void setCorreo(String correo) {
this.correo = correo;
}
/**
*
*/
public Usuario() {
// TODO Auto-generated constructor stub
}
}
Seguido creamos una clase SerializarDatos
public class SerializarDatos {
public SerializarDatos() {
}
public boolean xmlEnconder(String rutaIn, Usuario usuariosIn)
throws FileNotFoundException {
FileOutputStream fileOutputStream;
XMLEncoder encoder;
Usuario user;
fileOutputStream = new FileOutputStream(rutaIn);
encoder = new XMLEncoder(fileOutputStream);
user = new Usuario();
user.setNombre(usuariosIn.getNombre());
user.setApellido(usuariosIn.getApellido());
user.setEdad(usuariosIn.getEdad());
user.setCorreo(usuariosIn.getCorreo());
encoder.writeObject(user);
encoder.close();
return true;
}
}
Agregamos la clase
Teclado y creamos la clase
public class ProcesarDatos {
/**
*
*/
public ProcesarDatos() {
// TODO Auto-generated constructor stub
}
public void leerDatos(String rutaIn) {
StringBuffer buffer;
FileInputStream fileInputStream;
XMLDecoder decoder;
Usuario usuario;
try {
fileInputStream = new FileInputStream(rutaIn);
decoder = new XMLDecoder(fileInputStream);
usuario = (Usuario) decoder.readObject();
buffer = new StringBuffer();
buffer.append("Nombre: ").append(usuario.getNombre()).append("\n");
buffer.append("Apellido: ").append(usuario.getApellido()).append("\n");
buffer.append("Edad: ").append(usuario.getEdad()).append("\n");
buffer.append("Correo: ").append(usuario.getCorreo());
System.out.println(buffer.toString());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void escribirDatos(String rutaIn) {
Usuario usuario;
SerializarDatos serializarDatos;
String strDatos;
usuario = new Usuario();
strDatos = "";
try {
System.out.print("Ingresar nombre:");
strDatos = Teclado.lectura();
usuario.setNombre(strDatos);
System.out.println();
System.out.print("Ingresar Apellido:");
strDatos = Teclado.lectura();
usuario.setApellido(strDatos);
System.out.println();
System.out.print("Ingresar Edad:");
strDatos = Teclado.lectura();
usuario.setEdad(Integer.parseInt(strDatos));
System.out.println();
System.out.print("Ingresar Correo:");
strDatos = Teclado.lectura();
usuario.setCorreo(strDatos);
System.out.println();
System.out.println("Procesando información introducida.");
serializarDatos = new SerializarDatos();
serializarDatos.xmlEnconder(rutaIn, usuario);
System.out.println("Proceso Terminado.");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Y por último agregamos la clase Principal que será nuestro programa principal.
public class Principal {
/**
* @param args
*/
public static void main(String[] args) {
String strOpcion = "";
String rutaIn;
rutaIn = "/home/arielb/ampliandoconocimientosjava/usuarios.xml";
ProcesarDatos procesarDatos;
do {
System.out.println("\n\n\t Serialización de datos xml");
System.out.println("\t\t1 - Escribir datos.");
System.out.println("\t\t2 - Leer datos.");
System.out.println("\t\t3 - Salir.");
try {
procesarDatos = new ProcesarDatos();
strOpcion = Teclado.lectura();
switch (Integer.parseInt(strOpcion)) {
case 1:
procesarDatos.escribirDatos(rutaIn);
break;
case 2:
procesarDatos.leerDatos(rutaIn);
break;
case 3:
System.out.println("Saliendo del sistema");
break;
default:
System.out.println("Opción no considerada");
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} while (!strOpcion.trim().equals("3"));
}
}
Al tener estas clase podremos ejecutar nuestro programa y después de introducir los datos que solicita el programa podremos buscar en la ruta que colocamos en la variable rutaIn.
En esa ruta buscaremos un archivo llamado archivo.xml o el nombre que pusimos a nuestro gusto. el contenido del archivo según los datos que ingrese son:
C
Como verán existen dos métodos en la clase Procesar datos, uno que nos permite escribir los datos en el archivo y el otro que nos permite leerlos.
Leer más...