Desenpolvando 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!
Muy útil. Llevo varias horas tratando de encontrar la forma de guardar dinámicamente objetos en mi fichero y poder leerlos todos, y lo logré hasta ahora con ayuda de este código. Muchísimas gracias!
No hay de que Merelyn, gracias por dejar un comentario!
Me alegro de que te haya ayudado.
Saludos.
Hola, deseo realizar que un programa pueda un usuario baje un PDF individual y lo guarde en su PC, . Vos me puedes ayudar en eso??
Mb tu propuesta por eso te escribo.
Gracias.
Hola Adriana.
No acabo de entender bien la especificación de tu comentario. Pero gracias por dejar un comentario. Y he encontrado éste código fuente en Java que te podría ayudar:
try (BufferedInputStream inputStream = new BufferedInputStream(new URL(“http://www.dominiodelaweb.com/nombre-fichero.pdf”).openStream());
FileOutputStream fileOS = new FileOutputStream(“/Users/username/Documents/nombre-fichero.pdf”)) {
byte data[] = new byte[1024];
int byteContent;
while ((byteContent = inputStream.read(data, 0, 1024)) != -1) {
fileOS.write(data, 0, byteContent);
}
} catch (IOException e) {
// handles IO exceptions
}
..lo he sacado de https://stackabuse.com/how-to-download-a-file-from-a-url-in-java/. Espero que sirva.
Un saludo!