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