12.2 LEYENDO ARCHIVOS

 

Hola a todos, vamos a empezar viendo el flujo de caracteres como acceder a la información almacenada en un fichero.

Lo primero que vamos a hacer es crearnos un fichero con información que desde código Java podremos acceder a él y leer la información que contiene.



Este archivo al que he llamado ejemplo.txt lo tengo guardado en el Escritorio.

En Eclipse nos vamos a crear un nuevo proyecto al que vamos a llamar Streams, dentro de este proyecto creamos un paquete al que vamos a llamar secuencias y nos creamos nuestra primera clase Acceso_Fichero.java:

package secuencias;

 

public class Acceso_Fichero {

 

      public static void main(String[] args) {

 

      }

 

}

Después de la clase principal, la clase main vamos a crearnos otra clase que va hacer todo el trabajo para poder acceder a ese fichero.

package secuencias;

 

public class Acceso_Fichero {

 

      public static void main(String[] args) {

 

      }

 

}

class Leer_Fichero {

     

     

}

Lo primero que tenemos que hacer es indicarle a Java donde está el fichero al que queremos acceder, nos creamos un método dentro de la clase y dentro del método creamos la instancia perteneciente a la clase FileReader:

class Leer_Fichero {

     

      public void lee() {

           

            FileReader entrada = new FileReader("C:/Users/usuario/Desktop/ejemplo.txt");

      }

     

     

}

Sin embargo, Eclipse nos marca un error en la ruta donde le hemos indicado que tenemos el fichero ya que el método FileReader lanza una excepción de tipo IOException por lo que hay que crear el bloque try… catch:

try {

                  FileReader entrada = new FileReader("C:/Users/usuario/Desktop/ejemplo.txt");

            } catch (FileNotFoundException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

            }

En el catch en lugar de que aparezca ese error por defecto vamos a comentar esa línea y vamos a crear un System.out:

catch (FileNotFoundException e) {

                  // TODO Auto-generated catch block

                  //e.printStackTrace();

                  System.out.println("No se ha encontrado el fichero");

            }

El siguiente paso es indicarle al programa Java que comience a leer la información que contiene el fichero para ello utilizamos el método read() de la siguiente forma, dentro del try después de la instancia FileReader:

                  FileReader entrada = new FileReader("C:/Users/usuario/Desktop/ejemplo.txt");

                 

                  int c=entrada.read();

Dentro de la variable se almacena el primer carácter que se encuentra en el fichero, también nos marca error ya que el método read() genera una excepción de tipo IOException, sin embargo, ya está dentro de un bloque try lo que ocurre que la excepción que le hemos indicado en el catch:

catch (FileNotFoundException e)

No corresponde con el método read() por lo que en el catch en vez de captura el error FileNotFoundException capture IOException:

catch (IOException e) {

Después de la variable c nos creamos un while indicando que hasta que la variable no haya llegado al final del fichero se ejecute y que guarde en la variable c el carácter que este evaluando en cada momento y mediante un System.out le indicamos que nos imprima la información que hay en la variable c:

                  while(c!=-1) {

                       

                        c=entrada.read();

                       

                        System.out.println(c);

                  }

Con esto obtenemos todos los códigos enteros Unicode del texto que tenemos almacenado en el fichero.

En la clase principal nos creamos una instancia de la clase Leer_Fichero y llamar al método lee():

      public static void main(String[] args) {

           

            Leer_Fichero acceso = new Leer_Fichero();

           

            acceso.lee();

 

      }

Ejecutamos el programa y nos muestra por consola los códigos enteros Unicode de cada uno de los caracteres que tiene el fichero:



Cuando llega a -1 significa el final de la información. Tenemos que transformar estos códigos a los caracteres correspondientes y esto lo hacemos con un casting:

                  while(c!=-1) {

                       

                        c=entrada.read();

                       

                        char letra=(char)c;

                       

                        System.out.print(letra);

                  }

Si probamos ahora:



El interrogante hace referencia al -1 que marca el final de la información que contiene el fichero.

Si observamos Eclipse nos está marcando una advertencia referente a la instancia entrada:



Esto es debido a que hemos abierto un stream, un flujo de datos, hemos abierto una comunicación a un fichero de texto y este stream ha de ser cerrado. Para cerrar un flujo de datos utilizamos el método close(). Si este método lo escribiéramos dentro del while nos daría error:



La primera vuelta sí que leería el primer carácter del archivo pero en la segunda vuelta al estar el flujo de datos cerrado ya nos marcaría un error pasaría al catch. Por lo que sería conveniente escribirlo después de la cláusula while.

while(c!=-1) {

                       

                        c=entrada.read();

                       

                        char letra=(char)c;

                       

                        System.out.print(letra);

                                              

                  }

                 

                  entrada.close();

Pues ya hemos visto la forma de acceder a un fichero en el próximo post veremos cómo escribir en un fichero, os espero, no me falléis y hasta pronto!

12.1 STREAMS << >> 12.3 ESCRIBIENDO FICHEROS




No hay comentarios:

Publicar un comentario