Java: serializando objetos para guardar y recuperar en ficheros


Logo de JavaDesenpolvando un poco temas de Java, hoy traigo un pequeño HOWTO para guardar datos en ficheros sin complicarnos demasiado la vida. Normalmente trabajaremos sobre una base de datos cuando tenemos muchos datos. Es decir, cuando tenemos programas que gestionen sistemas de información. Pero a veces, necesitamos algo rápido para guardar en ficheros.

Así que aquí un pequeño código que usa la interfaz Serializable. Simplemente, el objeto que implementa esta interfaz, será fácilmente guardable como fichero de texto.

El código

Marco en negrita los códigos que hacen que un objeto se haga serializable. Aquí se almacenan dichos objetos en un array, así lo que se guarda es el array y de una tacada se guardan todos los objetos que haya. De igual forma se recuperan del disco para comprobar qué tal se han guardado:

import java.util.ArrayList;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.Serializable;

public class Serializando {
    @SuppressWarnings({ "unchecked" })
    public static void main(String[] arg) {

        ArrayList <Objeto> arrayList1 = new ArrayList <Objeto>();
        ArrayList <Objeto> arrayList2;

        System.out.println("Datos que vamos a escribir en el fichero:");
        for(int i = 0; i < 10; i++) {
            Objeto nuevoObjeto = new Objeto("Cadena" + i);
            arrayList1.add(nuevoObjeto);
            System.out.println( "arrayList1[" + i + "] = " + arrayList1.get(i) );
        }

        try {
            System.out.print("Guardando ArrayList en el fichero objetos.dat.. ");

            ObjectOutputStream escribiendoFichero = new ObjectOutputStream( 
            new FileOutputStream("objetos.dat") );
            escribiendoFichero.writeObject(arrayList1);
            escribiendoFichero.close();

            System.out.println("ok!");
            System.out.print("Leyendo ArrayList del fichero objetos.dat.. ");

            ObjectInputStream leyendoFichero = new ObjectInputStream( 
            new FileInputStream("objetos.dat") );
            arrayList2 = ( ArrayList <Objeto> )leyendoFichero.readObject();
            leyendoFichero.close();

            System.out.println("ok!");
            System.out.println("Datos leídos del fichero:");

            for(int i = 0; i < arrayList2.size(); i++) {
                System.out.println( "arrayList2[" + i + "] = " + arrayList2.get(i) );
            }
        } catch (Exception e) {
            System.out.println( e.getMessage() );
        }

    }

}

class Objeto implements Serializable {
    private String _dato;

    public Objeto (String dato) {
        this._dato = dato;
    }

    public String toString() {
        return this._dato;
    }
}

Ejecutando

Ahora para ejecutarlo tenemos que ejecutar desde línea de comandos lo siguiente:

$ javac Serializando.java
$ java Serializando

Si todo ha ido bien tenemos que ver en pantalla lo siguiente:

Datos que vamos a escribir en el fichero:
arrayList1[0] = Cadena0
arrayList1[1] = Cadena1
arrayList1[2] = Cadena2
arrayList1[3] = Cadena3
arrayList1[4] = Cadena4
arrayList1[5] = Cadena5
arrayList1[6] = Cadena6
arrayList1[7] = Cadena7
arrayList1[8] = Cadena8
arrayList1[9] = Cadena9
Guardando ArrayList en el fichero objetos.dat.. ok!
Leyendo ArrayList del fichero objetos.dat.. ok!
Datos leídos del fichero:
arrayList2[0] = Cadena0
arrayList2[1] = Cadena1
arrayList2[2] = Cadena2
arrayList2[3] = Cadena3
arrayList2[4] = Cadena4
arrayList2[5] = Cadena5
arrayList2[6] = Cadena6
arrayList2[7] = Cadena7
arrayList2[8] = Cadena8
arrayList2[9] = Cadena9

Ya está no tiene más historia. Espero que sirva. ¡Un saludo!

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *