Lectura de registros de un Fichero Externo

Vamos a revisar hoy uno de los métodos existentes para proceder a la lectura de los registros contenidos en un fichero de texto externo. En muchas ocasiones, los ficheros planos nos pueden ser muy útiles para transferir información de un módulo del sistema a otro. Por tanto, nos será muy necesario disponer de un método que nos permita recuperar el contenido de dichos ficheros y transformarlo a registros que puedan ser tratados por nuestra aplicación. Si no lo habéis hecho nunca, os parecerá un poco complejo al principio, pero en realidad es un proceso bastante sencillo.

 


 

En el ejercicio de hoy partiremos de un fichero .csv en el que tendremos registros compuestos de tres campos. La idea es que nuestro proceso sea capaz de ir leyendo las líneas que conforman dicho fichero (tanto la línea cabecera como el resto de líneas con contenido) e ir trasladando la información a una lista de String. De esta forma, posteriormente nuestra aplicación será capaz de trabajar con dicha lista y extraer la información de cada uno de los componentes (registros) de la misma. En nuestro caso simplemente procederemos a imprimir el contenido, pero los registros hubiesen estado disponibles para realizar cualquier otro tipo de tratamiento.

 

Lectura de registros de un Fichero Externo

 

Para explicar como se debe realizar el proceso de lectura de un fichero externo, vamos a trabajar con el siguiente ejemplo. Partiremos de un fichero que contendrá una serie de registros con los tickers de diversas empresas. El procesamiento será capaz de leer todos los registros del fichero y posteriormente procederá a imprimir el contenido de los mismos.

 

// **************************************************

package com.universo.fichero.defecto;

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.util.ArrayList;

import java.util.List;

 

public class AppLecturaFichero {

 

      public static void main(String[] args) {

             // TODO Auto-generated method stub

 

             System.out.println ("Lectura de fichero externo...");

            

             // Establecemos la ruta del fichero de entrada

             String archivoEntrada = "tickers.csv";

             String rutaFichero = "C:/tmp/" + archivoEntrada;

            

             // Creamos el fichero con la ruta de entrada

             File fileIn = new File(rutaFichero);

            

             // Error si la ruta del archivo de entrada recibido no existe

             if(!fileIn.exists()|| !fileIn.isFile()) {

                   System.out.println("Error - No se encuentra el fichero de entrada: " 

                                        + rutaFichero);

                   System.exit(1);

             }

            

             String path = rutaFichero;

            

             System.out.println("Sistema leyendo archivo: " + path);

            

             List<String> result = new ArrayList<>();

            

             try {

                  

                   // Creacion del Buffer de lectura

                   FileReader fr = new FileReader(path);

                   BufferedReader br = new BufferedReader(fr);

                  

                   String linea = "";

                  

                   // Vamos leyendo cada una de las lineas del fichero

                   while((linea = br.readLine()) != null) {

                          // Añadimos la linea leida a la lista de registros

                          result.add(linea);

                   }

                  

                   // Chequeamos si se ha leido algun registro del fichero de entrada

                   if (result.size() == 0) {

                          System.out.println("No se detectaron lineas en el archivo: " 

                                                + path);

                          System.exit(1);

                   }else {

                          System.out.println("Sistema Archivo leido");

                   }

                  

             }catch(Exception e) {

                   System.out.println("Error - Sistema Fichero: " + path);

                   System.out.println("Error - Sistema Excepcion de lectura: " + e);

                   System.exit(1);

             }

            

             System.out.println(" *** Registros del fichero *** ");

            

             // Recorremos los registros del fichero

             for (String item : result) {

                   System.out.println(item.toString());

             }

            

             System.out.println ("Fin del proceso de lectura...");

            

      }

 

}

// ************************************************** 

 

Detalle del proceso de Lectura de Fichero

 

A continuación, vamos a echarle un vistazo más detallado a cada uno de los pasos que hemos seguido para implementar el proceso anterior. Son los siguientes.

 

1º) En primer lugar, mencionar que tenemos que crear el fichero de texto que usaremos como entrada de nuestro proceso. En este ejemplo, se trata del fichero tickers.csv que tendrá el siguiente contenido.


TICKER;EMPRESA;MERCADO
GOOGL;Alphabet Google;Nasdaq
INTU;Intuit;Nasdaq
MSFT;Microsoft;Nasdaq
ISRG;Intuitive Surgical;Nasdaq
ADP;Automatic Data Processing;Nasdaq
TSLA;Tesla;Nasdaq
COST;Costco;Nasdaq
AAPL;Apple;Nasdaq
REP;Repsol;Ibex
IDR;Indra;Ibex


2º) Tendremos que establecer la ruta en la que se encuentra el fichero de entrada que va a leer nuestra aplicación. En el ejemplo se encuentra en la siguiente ruta:

C:/tmp/tickers.csv

 

Por eso montamos el path del modo indicado. Obviamente, vosotros tendréis que montarlo apuntando a vuestro propio path.


String archivoEntrada = "tickers.csv";

String rutaFichero = "C:/tmp/" + archivoEntrada;


3º) A continuación, generamos el fichero con la ruta de entrada que acabamos de establecer. Esto se haría del siguiente modo.


// Creamos el fichero con la ruta de entrada

File fileIn = new File(rutaFichero);


4º) A partir del path en el que se encuentra nuestro fichero, nos creamos el buffer de lectura que nos permitirá ir almacenando las líneas conforme se vayan recuperando.


FileReader fr = new FileReader(path);

BufferedReader br = new BufferedReader(fr);


5º) Posteriormente, establecemos un bucle que nos permitirá ir leyendo una a una las líneas del fichero. Esto se hace mediante la función readLine() del buffer BufferedReader. Los registros que se vayan recuperando se irán añadiendo a la lista de String donde vamos almacenando el resultado de nuestro proceso de extracción de datos del fichero.


while((linea = br.readLine()) != null) {

      // Añadimos la linea leida a la lista de registros

      result.add(linea);

}


6º) Finalmente, imprimimos el contenido de la lista con el resultado, para verificar que se han obtenido correctamente los registros del fichero externo.


for (String item : result) {

      System.out.println(item.toString());

}


7º) Ejecutamos el programa y el proceso debería acceder al fichero ticker.csv, leer los registros almacenados en el mismo y escribir los datos recuperados.

La salida por consola debería ser algo similar a esto.


Lectura de fichero externo...
Sistema leyendo archivo: C:/tmp/tickers.csv
Sistema Archivo leido
 *** Registros del fichero ***
TICKER;EMPRESA;MERCADO
GOOGL;Alphabet Google;Nasdaq
INTU;Intuit;Nasdaq
MSFT;Microsoft;Nasdaq
ISRG;Intuitive Surgical;Nasdaq
ADP;Automatic Data Processing;Nasdaq
TSLA;Tesla;Nasdaq
COST;Costco;Nasdaq
AAPL;Apple;Nasdaq
REP;Repsol;Ibex
IDR;Indra;Ibex
Fin del proceso de lectura...


Como se aprecia, se han ido imprimiendo todas las empresas que inicialmente habíamos almacenado en el fichero. Si habéis seguido correctamente los pasos anteriores, vosotros deberíais obtener un resultado similar al mostrado.


Como vemos, la funcionalidad vista hoy resulta interesante porque nos permite recuperar datos de un fichero externo y proceder a su tratamiento en la lógica de nuestro proyecto. Por supuesto, lo normal es que la información más relevante esté almacenada en BBDD (Base de Datos), pero nunca está de más disponer de un método para tratar los datos que no sean tan importantes para nuestra aplicación. Por ejemplo, podría tratarse de un informe generado por un sistema externo o de un listado con registros que deben ser cotejados contra el contenido de alguna tabla de nuestra BBDD.


Si os queda alguna duda, podéis dejarla aquí abajo.

Saludos.


Comentarios

Entradas populares de este blog

Configurar Apache Tomcat en Eclipse

Creación de Webservice SOAP mediante Anotaciones

Componentes y Ventanas de Java Swing