Para leer un fichero de texto carácter a carácter se debe utilizar la clase Java FileReader. El método constructor de esta clase requiere que se indique por parámetro el fichero que se quiere leer. La referencia a dicho fichero se puede realizar con una cadena de caracteres con la ruta y el nombre del mismo. Si el fichero no es encontrado, el método produce una excepción FileNotFound.

filereader

Dicha clase dispone del método read que permite leer sucesivamente un carácter de un fichero de texto, partiendo desde el inicio del fichero. Retorna un valor entero (int) con el código del carácter que es leído. En el momento en que se haya alcanzado el final del fichero (no haya más datos que leer) el método read retorna el valor -1.

read

Como podrás comprobar si utilizas cualquier clase para operaciones con ficheros, es necesario que las operaciones que se realicen se encuentren dentro de una estructura try..catch.

Es muy habitual, en los ficheros de acceso secuencial, tener que hacer recorridos a través de todo su contenido. Para ello, se debe ir leyendo sucesivamente su contenido hasta que se alcance el final del fichero. Ese final de fichero se detectará según el valor retornado por el método utilizado para realizar la lectura del contenido. Por tanto, es muy habitual encontrar bucles que realicen la lectura del fichero mientras no se alcance el fin de fichero.

FileReader fr;
int caract;
fr = new FileReader("nombre_fichero.txt");
caract = fr.read();
while(caract != -1) {
//Hacer algo con el carácter leído
caract = fr.read();
}

Observa que en el ejemplo anterior se hace una lectura del primer carácter contenido en el fichero fuera del bucle. Eso se hace porque es posible que el fichero exista, pero que esté vacío. En ese caso, no debe entrar en el bucle.

Como ya se ha comentado en un artículo anterior, siempre es conveniente cerrar el fichero después de su uso, por lo que debe realizarse una llamada al método close cuando se finalice con el uso del fichero, y también en caso de que se haya producido algún error en el procesamiento del fichero.

close

A continuación podrás ver un ejemplo completo de lectura de un fichero de texto llamado "prueba.txt" que debe encontrarse en la carpeta principal del proyecto. El contenido del fichero se muestra por la salida estándar.

Se utiliza la clase FileReader que requiere importar "java.io.FileReader", y el control de la excepción generada por no encontrar el fichero requiere "java.io.FileNotFoundException".

        String nombreFichero = "prueba.txt";
//Declarar una variable FileReader
FileReader fr = null;
try {
//Abrir el fichero indicado en la variable nombreFichero
fr = new FileReader(nombreFichero);
//Leer el primer carácter
//Se debe almacenar en una variable de tipo int
int caract = fr.read();
//Se recorre el fichero hasta encontrar el carácter -1
// que marca el final del fichero
while(caract != -1) {
//Mostrar en pantalla el carácter leído convertido a char
System.out.print((char)caract);
//Leer el siguiente carácter
caract = fr.read();
}
}
catch (FileNotFoundException e) {
//Operaciones en caso de no encontrar el fichero
System.out.println("Error: Fichero no encontrado");
//Mostrar el error producido por la excepción
System.out.println(e.getMessage());
}
catch (Exception e) {
//Operaciones en caso de error general
System.out.println("Error de lectura del fichero");
System.out.println(e.getMessage());
}
finally {
//Operaciones que se harán en cualquier caso. Si hay error o no.
try {
//Cerrar el fichero si se ha abierto
if(fr != null)
fr.close();
}
catch (Exception e) {
System.out.println("Error al cerrar el fichero");
System.out.println(e.getMessage());
}
}
        try
        {
           //Abrir el fichero indicado en la variable nombreFichero
           FileReader fr = new FileReader("prueba.txt");
           //Leer el primer carácter
           //Se debe almacenar en una variable de tipo int
           int caract = fr.read();
           //Se recorre el fichero hasta encontrar el carácter -1
           //   que marca el final del fichero
           while(caract != -1)
           {
               //Mostrar en pantalla el carácter leído convertido a char
               System.out.print((char)caract);
               //Leer el siguiente carácter
               caract = fr.read();
           }
           //Cerrar el fichero
           fr.close();
        }
        catch (Exception e)
        {
           System.out.println("Error de lectura del fichero");
        }