Los datos que no se pierden
Hasta ahora, cuando tu programa terminaba, todos sus datos desaparecían. Las variables viven en la memoria y se borran.
Un fichero guarda datos en el disco. Siguen ahí aunque apagues el ordenador: las notas de la clase, un horario, una lista de contactos.
Hoy aprendes a que tu programa lea un fichero de texto, línea a línea.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Fichero de texto | Un fichero con letras y números que puedes abrir con cualquier editor. | notas.txt |
| Ruta | El camino hasta el fichero: su nombre y las carpetas donde está. | datos/notas.txt |
| hasNextLine | Pregunta si queda otra línea por leer. Devuelve true o false. | in.hasNextLine() |
| nextLine | Lee la línea siguiente y la devuelve como String. | in.nextLine() |
| split | Corta un texto en trozos por un separador y los guarda en un array. | "Ana;8".split(";") |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un fichero se lee como el teclado
En la lección de leer datos del teclado usaste Scanner. Con los ficheros se usa el mismo Scanner y los mismos métodos.
Un bucle while pregunta hasNextLine() y, mientras haya líneas, lee una con nextLine().
Aquí practicas con un texto en lugar de un fichero. El código que lee es el mismo.
Pruébalo: leer las notas línea a línea
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Este texto hace de fichero: una línea por alumno.
Scanner in = new Scanner("Ana;8\nIker;5\nLucía;9\n");
int lines = 0;
int sum = 0;
while (in.hasNextLine()) {
String line = in.nextLine();
// split corta la línea por el punto y coma.
String[] parts = line.split(";");
int grade = Integer.parseInt(parts[1]);
System.out.println(parts[0] + " sacó un " + grade);
lines++;
sum = sum + grade;
}
System.out.println("Líneas: " + lines + ", suma: " + sum);
}
}
Ejemplo resuelto: qué ve el programa
| Línea leída | parts[0] | parts[1] | Suma después |
|---|---|---|---|
| Ana;8 | Ana | 8 | 8 |
| Iker;5 | Iker | 5 | 13 |
| Lucía;9 | Lucía | 9 | 22 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Con un fichero de verdad
Para leer un fichero de verdad solo cambia la línea que crea el Scanner: new Scanner(new File("notas.txt")).
El fichero puede no existir. Por eso Java te obliga a atender el error FileNotFoundException con un try y un catch, como viste en la lección de excepciones.
Al final se cierra el Scanner con close().
Así se lee un fichero de verdad
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
Scanner in = new Scanner(new File("notas.txt"));
while (in.hasNextLine()) {
System.out.println(in.nextLine());
}
in.close();
} catch (FileNotFoundException e) {
System.out.println("No encuentro el fichero notas.txt");
}
}
}
Repaso rápido
Inténtalo
Repaso rápido
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
Dónde busca Java el fichero
Si escribes solo "notas.txt", Java lo busca en la carpeta desde donde se ejecuta el programa.
Si está en otra carpeta, lo dices en la ruta: "datos/notas.txt".
Cuando el programa dice que no encuentra el fichero, casi siempre la ruta o el nombre están mal escritos.