Java desde Cero: Archivos (E/S)

Publicado el 19 marzo 2014 por Codehero @codeheroblog

Hoy vamos a ver como escribir y leer (I/O) información de un archivo con la ayuda de Java.

Paquete java.io

El paquete java.io contiene casi todas las clases que podamos necesitar para llevar a cabo la entrada y salida (I/O) en Java. En especial, vamos a hacer uso de los llamados streams para poder leer y escribir datos en los archivos.Un stream puede ser definido como una secuencia de datos. El InputStream se utiliza para leer datos de una fuente y el OutputStream se utiliza para escribir datos en un destino.

Primero, imaginemos que queremos leer un texto de un archivo.


¿Cómo leer un texto de un archivo?

Echemos un ojo al siguiente código:

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class ArchivoMuestra { public String leerTextoArchivo(String nombreArchivo) { String texto = ""; FileReader archivo = null; String linea = ""; try { archivo = new FileReader(nombreArchivo); BufferedReader lector = new BufferedReader(archivo); while ((linea = lector.readLine()) != null) { texto += linea + "\n"; } } catch (FileNotFoundException e) { throw new RuntimeException(“Archivo no encontrado"); } catch (IOException e) { throw new RuntimeException(“Ocurrio un error de entrada/salida“); } finally { if (archivo != null) { try { archivo.close(); } catch (IOException e) { e.printStackTrace(); } } } return texto; } }

1234567891011121314151617181920212223242526272829303132333435 import javaioBufferedReader;import javaioBufferedWriter;import javaioFileNotFoundException;import javaioFileReader;import javaioFileWriter;import javaioIOException; publicclassArchivoMuestra{   publicStringleerTextoArchivo(StringnombreArchivo){  Stringtexto="";  FileReader archivo=null;  Stringlinea="";  try{  archivo=newFileReader(nombreArchivo);  BufferedReader lector=newBufferedReader(archivo);  while((linea=lectorreadLine())!=null){  texto+=linea+"\n";  }  }catch(FileNotFoundExceptione){  thrownewRuntimeException(Archivo no encontrado");  }catch(IOExceptione){  thrownewRuntimeException(Ocurrio un error de entrada/salida);  }finally{  if(archivo!=null){  try{  archivoclose();  }catch(IOExceptione){  eprintStackTrace();  }  }  }  returntexto;  }}

Podemos observar que en el código declaramos una clase ejemplo llamada ArchivoMuestra y un método leerTextoArchivo el cual nos va ayudar a extraer el texto del archivo. El método se ayuda de la clase FileReader de Java para acceder a el archivo y de un buffer de lectura (BufferedReader) para poder extraer los datos del texto.

Simplemente lo que realiza a manera de flujo este método, es la apertura del archivo con ayuda del archivo = new FileReader(nombreArchivo), segundo genera un buffer de lectura en el cual se va a ir cargando el texto extraído del archivo con ayuda del BufferedReader lector. Y por ultimo va a ir recorriendo con un loop el archivo linea por linea y al almacenando el contenido de dicha linea en el buffer lector para que una vez que se finalice la lectura y se cierre el archivo con archivo.close() sea retornado el valor del texto.

Ahora, imaginemos que queremos guardar un texto en un archivo.


¿Cómo guardar un texto en un archivo?

Echemos un ojo al siguiente código:

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class ArchivoMuestra { public void escribirTextoArchivo(String nombreArchivo, String texto) { FileWriter salida = null; try { salida = new FileWriter(nombreArchivo); BufferedWriter escritor = new BufferedWriter(salida); escritor.write(texto); } catch (IOException e) { e.printStackTrace(); } finally { if (salida != null) { try { salida.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

1234567891011121314151617181920212223242526272829 import javaioBufferedReader;import javaioBufferedWriter;import javaioFileNotFoundException;import javaioFileReader;import javaioFileWriter;import javaioIOException; publicclassArchivoMuestra{ publicvoidescribirTextoArchivo(StringnombreArchivo,Stringtexto){  FileWriter salida=null;  try{  salida=newFileWriter(nombreArchivo);  BufferedWriter escritor=newBufferedWriter(salida);  escritorwrite(texto);  }catch(IOExceptione){  eprintStackTrace();  }finally{  if(salida!=null){  try{  salidaclose();  }catch(IOExceptione){  eprintStackTrace();  }  }  }   }}

Podemos observar que en el código declaramos una clase ejemplo llamada ArchivoMuestra y un método escribirTextoArchivo el cual nos va ayudar a guardar el texto del archivo. El método se ayuda de la clase ** FileWriter** de Java para acceder a el archivo y de un buffer de escritura (** BufferedWriter**) para poder guardar los datos del texto.

Simplemente lo que realiza a manera de flujo este método, es la apertura del archivo con ayuda del salida = new FileWriter(nombreArchivo), segundo genera un buffer de salida en el cual se va a cargar el texto con ayuda del BufferedWriter escritor. Y por ultimo va a escribir los datos en el archivo con escritor.write(texto), una vez que se finalice la escritura se cerrará el archivo con salida.close().

Ahora veamos esta clase ArchivoMuestra en funcionamiento:


Probemos

Para probar la clase que creamos anteriormente primero vamos a necesitar crear un archivo de prueba llamado Prueba.txt y que el mismo se encuentre en la carpeta de nuestro proyecto de prueba. Segundo vamos a tener que agregar el siguiente código en la clase principal de nuestro proyecto.

El archivo Prueba.txt puede contener el texto que quieras, en mi caso posee Gracias por aprender con Codehero.

public class Main { public static void main(String[] args) { ArchivoMuestra archivo = new ArchivoMuestra(); String entrada = archivo.leerTextoArchivo("Prueba.txt"); System.out.println(entrada); archivo.escribirTextoArchivo("PruebaCopia.txt", entrada); } }

12345678 publicclassMain{  publicstaticvoidmain(String[]args){  ArchivoMuestra archivo=newArchivoMuestra();  Stringentrada=archivoleerTextoArchivo("Prueba.txt");  Systemoutprintln(entrada);  archivoescribirTextoArchivo("PruebaCopia.txt",entrada);  }}

Observemos que este código lo único que va a ser es instanciar la clase ArchivoMuestra para poder hacer uso de los métodos de escritura y de lectura. A su vez, va a leer el texto contenido en el archivo Prueba.txt, lo va a imprimir en la consola y por ultimo va a crear un archivo llamado PruebaCopia.txt con el texto extraído del archivo anterior.

Si ejecutamos el proyecto deberíamos obtener:

Por consola:

Gracias por aprender con Codehero

1 Gracias por aprender con Codehero

En archivo

Un archivo extra denominado PruebaCopia.txt.


Conclusión

En esta lección, vimos como escribir y leer (I/O) información de un archivo con la ayuda de Java. Si tienes alguna pregunta, yo estaré feliz de responderte en los comentarios, además espero que te unas y le eches un vistazo a todo el resto de este curso.

¡Te espero la próxima semana!