Persistencia con XMLEncoder

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.

No hay comentarios: