Guardar la clasificación del torneo
Tu instituto organiza un torneo de fútbol. Tu programa calcula los puntos de cada equipo.
Si solo los escribe en pantalla, se pierden al cerrar. Mañana habría que calcularlo todo otra vez.
Hoy aprendes a escribir los resultados en un fichero de texto, para guardarlos.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| PrintWriter | Una clase para escribir texto. Tiene println y print, como System.out. | new PrintWriter("torneo.txt") |
| flush | Manda al destino lo que el PrintWriter tenía esperando. | out.flush() |
| close | Termina de escribir y cierra el fichero. También hace flush. | out.close() |
| Sobrescribir | Empezar el fichero de cero. Lo que había se pierde. | new PrintWriter("torneo.txt") |
| Añadir | Escribir al final del fichero, sin borrar lo que ya tenía. | new FileWriter("torneo.txt", true) |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Escribir es como imprimir
Ya conoces System.out.println. Un PrintWriter tiene los mismos métodos: println y print.
La diferencia es el destino. System.out escribe en la pantalla. Un PrintWriter escribe donde tú le digas: un fichero, la memoria o incluso la pantalla.
Aquí lo probamos escribiendo en la pantalla, para ver el resultado.
Pruébalo: escribir con PrintWriter
import java.io.PrintWriter;
public class Main {
public static void main(String[] args) {
// Escribimos en la pantalla. Con un fichero sería igual.
PrintWriter out = new PrintWriter(System.out);
out.println("Torneo del instituto");
out.println("Los Tigres: 3 puntos");
out.println("Las Águilas: 1 punto");
out.print("Fin");
out.print(" de la jornada");
out.println();
// flush manda lo que estaba esperando.
out.flush();
}
}
Con un fichero de verdad
Para escribir en un fichero, le das el nombre al PrintWriter: new PrintWriter("torneo.txt").
Si el fichero no existe, se crea. Si ya existe, se borra lo que tenía y empieza de cero.
El try con paréntesis cierra el fichero solo al terminar. Puede lanzar FileNotFoundException, así que lleva su catch.
Así se escribe un fichero de verdad
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class Main {
public static void main(String[] args) {
// Los paréntesis del try cierran el fichero al terminar.
try (PrintWriter out = new PrintWriter("torneo.txt")) {
out.println("Tigres;3");
out.println("Águilas;1");
} catch (FileNotFoundException e) {
System.out.println("No puedo crear el fichero torneo.txt");
}
}
}
Si no cierras, puede quedar vacío
Advertencia
El PrintWriter guarda el texto en una memoria y lo manda al fichero más tarde. Si el programa acaba sin close ni flush, parte del texto, o todo, no llega. Usa el try con paréntesis o llama a close.
Repaso rápido
Inténtalo
Repaso rápido
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
Ver lo que se escribiría
Para comprobar qué texto tendría un fichero, un PrintWriter puede escribir en un StringWriter. Es un texto que vive en la memoria.
Con toString() lo lees. Así pruebas tu código sin crear ningún fichero.
Las pruebas de la tarea de hoy usan este truco.