MORENO SARDELLA · RECUPERO JAVA
← Tutte le lezioni
Lezione 8

FILE DI TESTO E CSV

Salvare i dati su disco e rileggerli: scrivere con PrintWriter, leggere con Scanner, analizzare le stringhe con split e gestire i file CSV.

01
Perche' i file

Memoria che resta

Quando il programma termina, tutte le variabili (e gli array, e gli ArrayList) spariscono: sono nella RAM, volatile. Un file e' salvato su disco e resta: lo puoi rileggere domani, condividerlo, aprirlo con Excel. Per questo la verifica chiede di salvare i risultati su file.

02
Scrivere e leggere

PrintWriter e Scanner

Per scrivere si usa PrintWriter (come un println verso il file). Per leggere, lo Scanner riga per riga. Tutto dentro throws IOException (o try/catch), e si chiude sempre il file.

Scrivere

import java.io.*; PrintWriter out = new PrintWriter("diario.txt"); out.println("Riga 1"); out.println("Riga 2"); out.close();

Leggere

import java.util.*; import java.io.*; Scanner in = new Scanner(new File("diario.txt")); while (in.hasNextLine()) System.out.println(in.nextLine()); in.close();
03
Analizzare una riga

Lo split e il CSV

Un file CSV ha i campi di ogni riga separati da un carattere (qui il punto e virgola ;, come chiede la verifica). Per spezzare una riga nei suoi campi si usa split, che restituisce un array di String. Poi si convertono i numeri con Double.parseDouble o Integer.parseInt.

Rossi;Mario;7.5 [0] Rossi [1] Mario [2] 7.5 split(";")
"Rossi;Mario;7.5".split(";") → array di 3 stringhe.
leggi_csv.java
Scanner in = new Scanner(new File("voti.csv"));
double somma = 0; int n = 0;
while (in.hasNextLine()) {
    String[] campi = in.nextLine().split(";");   // spezza la riga sui ';'
    somma += Double.parseDouble(campi[1]);       // campo 1 = voto
    n++;
}
in.close();
System.out.println("Media: " + (somma / n));
04
Scrivere un report CSV

Output formattato

Per generare il CSV richiesto dalla verifica: prima l'intestazione, poi una riga per ogni elemento. Con String.format("%.2f", x) si forza il numero a due decimali.

PrintWriter out = new PrintWriter("pagamenti.csv"); out.println("TipoEntita;Identificativo;ImportoDovuto"); for (Pagabile p : lista) out.println(p.getTipo() + ";" + p.getId() + ";" + String.format("%.2f", p.getImporto())); out.close();
pagamenti.csvTipoEntita;Identificativo;ImportoDovuto ImpiegatoSalariato;Mario Rossi;2500.00 Fattura;F001 - Consulenza Reti;2400.00 ImpiegatoOrario;Luigi Verdi;1280.00

Esercizi su file di testo e CSV ↓

File e CSV - Esercizi basescarica ↓
File e CSV - Esercizi avanzatiscarica ↓