Salta al contenuto principale

Come leggere file csv con Java

Profile picture for user luca77king

Lavorare con i file CSV (Comma Separated Value) è una delle attività più comuni che gli sviluppatori devono svolgere. Java non fa eccezione e in questa lezione vi fornirò una panoramica completa di come questo compito può essere svolto utilizzando due metodi nativi di questo linguaggio. Esploreremo i due metodi di lettura dei file, tenendo conto di fattori importanti come l'ottimizzazione delle prestazioni e l'utilizzo della memoria. Alla fine di questo articolo, avrete una comprensione completa di come analizzare i vostri file CSV in pochissimo tempo.

Nella nostra lezione andremo a leggere un file chiamato “dati.csv” contenente tre colonne "CODICE CLIENTE", "IMPORTO SPESA" e "DATA ULTIMA SPESA".

Utilizzare la classe BufferedReader

Per leggere un file CSV in Java, è possibile utilizzare la classe BufferedReader in combinazione con la classe FileReader per leggere il contenuto del file riga per riga e quindi suddividere ogni riga in colonne utilizzando la funzione split della classe String.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.File;

public class Main {
    public static void main(String[] args) {
        String filePath = new File("./resources/dati.csv").getAbsolutePath();
        boolean isFirstLine = true;

        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                if (isFirstLine) {
                    isFirstLine = false;
                    continue;
                }

                String[] columns = line.split(";");
                String customerCode = columns[0];
                String purchaseAmount = columns[1];
                String lastPurchaseDate = columns[2];

                System.out.println("CODICE CLIENTE: " + customerCode + ", IMPORTO SPESA: " + purchaseAmount + ", DATA ULTIMA SPESA: " + lastPurchaseDate);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

La classe BufferedReader viene utilizzata per leggere il contenuto del file riga per riga. La funzione readLine viene utilizzata per leggere ogni riga del file fino a quando non viene raggiunta la fine del file.

Per ogni riga del file, utilizziamo la funzione split per suddividere la riga in colonne basate sul carattere di separazione ";". Ogni colonna viene quindi assegnata a una variabile specifica e viene stampata a video.

Nel codice, abbiamo introdotto una variabile booleana isFirstLine che tiene traccia se la riga corrente è la prima riga del file. Se la riga corrente è la prima riga del file, impostiamo isFirstLine su false e saltiamo alla riga successiva utilizzando la keyword continue. In questo modo, la prima riga del file viene ignorata.


Utilizzare la classe Scanner

Un'alternativa per leggere un file CSV in Java consiste nell'utilizzare la classe Scanner. Per utilizzare questo metodo, è necessario importare nel progetto il pacchetto java.util, che include la classe Scanner. Una volta fatto ciò, è possibile creare un'istanza della classe Scanner e aprire il file CSV.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String filePath = new File("./resources/dati.csv").getAbsolutePath();
        boolean isFirstLine = true;

        try (Scanner scanner = new Scanner(new File(filePath))) {
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();

                if (isFirstLine) {
                    isFirstLine = false;
                    continue;
                }

                String[] columns = line.split(";");
                String customerCode = columns[0];
                String purchaseAmount = columns[1];
                String lastPurchaseDate = columns[2];

                System.out.println("CODICE CLIENTE: " + customerCode + ", IMPORTO SPESA: " + purchaseAmount + ", DATA ULTIMA SPESA: " + lastPurchaseDate);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

In questo codice, abbiamo creato un oggetto Scanner per leggere il file e utilizzato il metodo hasNextLine() per verificare se ci sono altre righe da leggere. Ad ogni iterazione, leggiamo una riga utilizzando il metodo nextLine() e gestiamo l'ignorare la prima riga del file allo stesso modo come nel codice precedente.

Per il resto, il codice funziona allo stesso modo come nel codice precedente, con ogni riga del file che viene suddivisa in colonne e ogni colonna che viene assegnata a una variabile specifica e stampata a video.

Conclusione

La lettura di file CSV (Comma Separated Value) in Java può essere effettuata anche sfruttando librerie esterne come OpenCSV o Apache Commons CSV, ma questo lo vedremo quando tratteremo Maven. In questa lezione, abbiamo visto come leggere file CSV in Java utilizzando gli strumenti nativi del linguaggio e abbiamo anche discusso alcuni dei problemi comuni che si possono incontrare quando si lavora con i file CSV.

Faqs

Che cos'è un file CSV?
Un file CSV (Comma Separated Value) è un file di testo che memorizza i dati tabulari in formato pianificato, con i valori separati da virgole.
Perché Java è comunemente utilizzata per lavorare con i file CSV?
Java è comunemente utilizzata per lavorare con i file CSV perché è uno dei linguaggi di programmazione più diffusi e supportati, con una vasta gamma di librerie e strumenti disponibili per questo scopo.
Quali sono i due metodi nativi di Java per leggere file CSV?
I due metodi nativi di Java per leggere file CSV sono la classe BufferedReader e la classe Scanner.
Come funziona la classe BufferedReader per leggere file CSV?
La classe BufferedReader legge il contenuto del file riga per riga e utilizza la funzione split della classe String per suddividere ogni riga in colonne basate sul carattere di separazione.
Qual è un'alternativa alla classe BufferedReader per leggere file CSV in Java?
Un'alternativa alla classe BufferedReader è la classe Scanner, che può essere utilizzata per leggere il file e suddividerlo in colonne.