Lectura de un fichero de texto en java

Aunque Java puede manejar también ficheros binarios, vamos a centrarnos exclusivamente en la utilización de ficheros de texto. Los ficheros de texto tienen una gran ventaja, se pueden crear y manipular mediante cualquier editor como por ejemplo GEdit.

Siempre que vayamos a usar ficheros, deberemos incluir al principio del programa una o varias líneas para cargar las clases necesarias. Anque se pueden cargar varias clases en una sola línea usando el asterisco de la siguiente manera:

import java.io.*;

nosotros no lo haremos así, ya que nuestro código sigue las normas del estándar de Google y estas normas lo prohiben taxativamente. Se importarán las clases usando varias líneas, una línea por cada clase que se importa en el programa; de esta forma:


import java.io.BufferedReader;import java.io.FileReader;
No es necesario saber de memoria los nombres de las clases, el entorno de desarrollo Netbeans detecta qué clases hacen falta cargar y añade los import de forma automá- tica. 

Todas las operaciones que se realicen sobre ficheros deberán estar incluidas en un bloque try-catch. Esto nos permitirá mostrar mensajes de error y terminar el programa de una forma ordenada en caso de que se produzca algún fallo - el fichero no existe, no tenemos permiso para acceder a él, etc. 

El bloque try-catch tiene el siguiente formato:  

try {         Operaciones_con_fichero} catch (tipo_de_error nombre_de_variable) {        Mensaje_de_error}
 Tanto para leer como para escribir utilizamos lo que en programación se llama un “manejador de fichero”. Es algo así como una variable que hace referencia al fichero con el que queremos trabajar.

En nuestro ejemplo, el manejador de fichero se llama bf y se crea de la siguiente manera:

BufferedReader bf = new BufferedReader(new FileReader("malaga1.txt"));

El fichero con el que vamos a trabajar tiene por nombre malaga1.txt y contiene información extraída de la Wikipedia sobre la bonita ciudad de Málaga1. A partir de aquí, siempre que queramos realizar una operación sobre ese archivo, utilizaremos su manejador de fichero asociado, es decir bf. 

En el ejemplo que se muestra a continuación, el programa lee el contenido del fichero malaga1.txt y lo muestra tal cual en pantalla, igual que si hiciéramos en una ventana de terminal cat malaga1.txt. 

Observa que se va leyendo el fichero línea a línea mediante bf.readLine() hasta que se acaban las líneas. Cuando no quedan más líneas por leer se devuelve el valor null.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
class EjemploFichero01 {
public static void main(String[] args) {
  try {
   BufferedReader bf = new BufferedReader(new FileReader("malaga1.txt"));
   String linea = "";
   while (linea != null) {
    System.out.println(linea);
    linea = bf.readLine();
   }
   bf.close();
  } catch (FileNotFoundException e) { // qué hacer si no se encuentra el fichero
   System.out.println("No se encuentra el fichero malaga.txt");
  } catch (IOException e) { // qué hacer si hay un error en la lectura del fichero
   System.out.println("No se puede leer el fichero malaga.txt");
  }
 }
}

Es importante “cerrar el fichero” cuando se han realizado todas las operaciones necesarias sobre él. En este ejemplo, esta acción se ha llevado a cabo con la sentencia bf.close().

A continuación se muestra un programa un poco más complejo. Se trata de una aplicación que pide por teclado un nombre de fichero. Previamente en ese fichero (por ejemplo numeros.txt) habremos introducido una serie de números, a razón de uno por línea. Se podrían leer también los números si estuvieran separados por comas o espacios aunque sería un poco más complicado (no mucho más). Los números pueden contener decimales ya que se van a leer como Double. Cada número que se lee del fichero se va sumando de tal forma que la suma total estará contenida en la variable suma; a la par se va llevando la cuenta de los elementos que se van leyendo en la variable i. Finalmente, dividiendo la suma total entre el número de elementos obtenemos la media aritmética de los números contenidos en el fichero.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
class EjemploFichero08 {
 public static void main(String[] args) {
  System.out.print("Introduzca el nombre del archivo donde se encuentran los números: ");
  String nombreFichero = System.console().readLine();
  try {
   BufferedReader bf = new BufferedReader(new FileReader(nombreFichero));
   String linea = "0";
   int i = 0;
   double suma = 0;
   while (linea != null) {
    i++;
    suma += Double.parseDouble(linea);
    linea = bf.readLine();
   } i
   --;
   bf.close();
   System.out.println("La media es " + suma / (double)i);
  } catch (IOException e) {
   System.out.println(e.getMessage());
  }
 }
}

Compartir

0 Comment to "Lectura de un fichero de texto en java"

Publicar un comentario