miércoles, 17 de enero de 2007

Como almacenar y recuperar datos utilizando archivos de texto con Java

Para cualquier sistema informático es de vital importancia poder almacenar datos, de manera tal que la próxima vez que se encienda el ordenador y accedamos al sistema podamos recuperarlos, una forma de almacenar datos seria escribiéndolos sobre un archivo de texto.

import java.io.File;
import java.io.FileWriter;

Para ello necesitaremos de 2 clases fundamentales File y FileWriter, para poder instanciarlos debemos importar las siguientes librerías:

import java.io.File;
import java.io.FileWriter;

Luego crearemos el archivo:

File miArchivo = new File("unArchivo.txt");

También necesitaremos instanciar a FileWriter (que recibe como parámetro un archivo) que es el encargado de rellenar el archivo con la información:

try {

FileWriter writer = new FileWriter(miArchivo);

}

catch (IOException ex) {
ex.printStackTrace();

}

Ahora es el momento en el que debemos escribir los datos en el arhivo, siempre dentro del Try:

writer.write("Este es mi texto almacenado");

Y por ultimo debemos cerrar el FileWriter, dentro del Try:

writer.close();

Observacion: Sin este ultimo paso, el archivo quedaría vació.

Generalmente estamos acostumbrados a cerrar el archivo, en este caso el FileWriter se encarga de cerrar el archivo y guardar los cambios realizados.

De esta manera el archivo ha sido creado, ya contiene la información que se le proporciono para almacenar, y estos datos persistirán en disco.

Ahora si, cada vez que escribamos algo al archivo con write, esto se almacenara justo después de lo ultimo escrito, osea que si lo hacemos así:

writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.close();

Lo que tendremos como resultado en el archivo seria exactamente esto:

Este es mi texto almacenadoEste es mi texto almacenadoEste es mi texto almacenadoEste es mi texto almacenado

Podríamos separalos mediante caracteres de escape como \n para una nueva línea, aunque seria tedioso a la hora que necesitemos almacenar 1000 líneas, por lo que aconsejaría utilizar aparte del FileWriter la clase PrintWriter que recibe como parámetro al FileWriter que a la vez ya tiene asignado el archivo sobre el cual va a trabajar, en este caso la clase el método quedaría algo así:

public void escribirArchivo(String datos){

File miArchivo = new File("unArchivo.txt");

try {
FileWriter writer = new FileWriter(miArchivo);
PrintWriter printer=new PrintWriter(writer);
printer.println(datos);
printer.close();
}

catch (IOException ex) {

ex.printStackTrace();
}

}

Comparando el método write con el println:

printer.println("Este es mi texto almacenado");
printer.println("Este es mi texto almacenado");
printer.println("Este es mi texto almacenado");
printer.println("Este es mi texto almacenado");

Tendríamos como resultado:

Este es mi texto almacenado
Este es mi texto almacenado
Este es mi texto almacenado
Este es mi texto almacenado

en lugar de:

Este es mi texto almacenadoEste es mi texto almacenadoEste es mi texto almacenadoEste es mi texto almacenado

que es lo que se obtuvo con:

writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");

Nótese que no cerramos el writer sino el printer, ya que printer se encarga de cerrar todo lo demás, guardando así los cambios realizados.

En caso de querer modificar el archivo ya creado, primero se deberá almacenar en una variable el dato que ya contiene, debido a que al escribir de nuevo se sobrescribirá el archivo.

Para leer el contenido del archivo necesitaremos crear instancias de BufferedReader y FileReader, y una variable String para almacenar los datos leídos, entre los imports se debera agregar:

import java.io.FileReader;
import java.io.BufferedReader;

Luego creamos el archivo y el BufferedReader que contendrá todo lo que esta escrito en el archivo:

File miArchivo = new File("unArchivo.txt");
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(miArchivo));
String linea = reader.readLine();
String datos="";

Ya solo queda recorrer el archivo y guardar cada linea en la variable datos:

while(linea!=null){
datos+=linea;
reader.readline();
}
} catch(IOException ex){
ex.printStackTrace
}

Ahora si, ya tenemos lo contenido en el archivo dentro de la variable datos, y podemos utilizarla para lo que necesitemos, para visualizarla en un JTextArea, o simplemente imprimirlo a consola, etc.

Espero este tutorial haya sido de ayuda, no dudes en escribirnos, sobre cualquier duda, tutorial o sugerencia que tengas para aportar.

2 comentarios:

SErgio -Gonzalez dijo...

Viejo gracias. Si muy util

Unknown dijo...

Excelente post, me sirvio demasiado, esta re bien explicado y super detallado. Genial!