Easier to read with cream paper, a tint, more contrast or larger text? Choose your colours and text, once, for every page.

Vista previa

Leer ficheros de texto

Esta es la primera página de la lección. Léela y prueba las actividades. El resto está en el curso completo.

40 minutos

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

PalabraQué significaEjemplo
Fichero de textoUn fichero con letras y números que puedes abrir con cualquier editor.notas.txt
RutaEl camino hasta el fichero: su nombre y las carpetas donde está.datos/notas.txt
hasNextLinePregunta si queda otra línea por leer. Devuelve true o false.in.hasNextLine()
nextLineLee la línea siguiente y la devuelve como String.in.nextLine()
splitCorta 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

Código: java
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ídaparts[0]parts[1]Suma después
Ana;8Ana88
Iker;5Iker513
Lucía;9Lucía922

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

Código: java
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 preguntas
Pruébalo: tus respuestas se corrigen aquí y después se olvidan. Inicia sesión si quieres que se guarde tu puntuación y continuar donde lo dejaste.Iniciar sesión para guardar tu puntuación

Tus 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.

La lección continúa

6 partes más de esta lección están en el curso completo, con los ejercicios y la comprobación final. Una cuenta te da todo.