Come scrivere su un file CSV in Java

1. Panoramica

In questo breve tutorial, impareremo come scrivere su un file CSV utilizzando Java . CSV è l'acronimo di Comma-Separated-Values ​​ed è un formato comune per eseguire un trasferimento di dati di massa tra i sistemi.

Per scrivere il nostro file CSV, utilizzeremo le classi nel pacchetto java.io.

Parleremo di caratteri speciali e di come gestirli. Mireremo al nostro file di output per aprirlo in Microsoft Excel e Fogli Google.

Dopo il nostro esempio Java, daremo una breve occhiata ad alcune librerie di terze parti disponibili per lavorare con i file CSV.

2. Scrivere con PrintWriter

Useremo un PrintWriter per scrivere il nostro file CSV. Per uno sguardo più dettagliato sull'uso di java.io per scrivere su un file, vedere il nostro articolo sulla scrittura su file.

2.1. Scrivere il CSV

Per prima cosa, creiamo un metodo per formattare una singola riga di dati, rappresentata come un array di String s:

public String convertToCSV(String[] data) { return Stream.of(data) .map(this::escapeSpecialCharacters) .collect(Collectors.joining(",")); }

Prima di chiamare questo metodo, tuttavia, creiamo alcuni dati di esempio:

List dataLines = new ArrayList(); dataLines.add(new String[] { "John", "Doe", "38", "Comment Data\nAnother line of comment data" }); dataLines.add(new String[] { "Jane", "Doe, Jr.", "19", "She said \"I'm being quoted\"" });

E con quei dati in mano, convertiamo ogni riga con convertToCSV e scriviamola in un file:

public void givenDataArray_whenConvertToCSV_thenOutputCreated() throws IOException { File csvOutputFile = new File(CSV_FILE_NAME); try (PrintWriter pw = new PrintWriter(csvOutputFile)) { dataLines.stream() .map(this::convertToCSV) .forEach(pw::println); } assertTrue(csvOutputFile.exists()); }

2.2. Gestione di caratteri speciali

In un file CSV, alcuni caratteri sono problematici e, come sviluppatori, raramente abbiamo il controllo totale sulla qualità dei nostri dati. Quindi diamo ora un'occhiata a come gestire i caratteri speciali.

Per il nostro esempio, ci concentreremo su virgole, virgolette e nuove righe. I campi contenenti virgole o virgolette saranno racchiusi tra virgolette doppie e le virgolette doppie verranno precedute da virgolette doppie. Elimineremo le nuove righe e le sostituiremo ciascuna con spazi bianchi.

Quali caratteri rappresentano un problema e come devono essere gestiti possono variare a seconda del caso d'uso.

Il nostro metodo convertToCSV chiama il metodo escapeSpecialCharacters su ogni pezzo di dati mentre costruisce una stringa.

Implementiamo ora il nostro metodo escapeSpecialCharacters :

public String escapeSpecialCharacters(String data) { String escapedData = data.replaceAll("\\R", " "); if (data.contains(",") || data.contains("\"") || data.contains("'")) { data = data.replace("\"", "\"\""); escapedData = "\"" + data + "\""; } return escapedData; }

3. Biblioteche di terze parti

Come abbiamo visto con il nostro esempio, scrivere un file CSV può diventare complicato quando iniziamo a pensare a caratteri speciali e a come gestirli.

Fortunatamente per noi, ci sono molte librerie di terze parti disponibili per lavorare con file CSV e molte di loro gestiscono questi caratteri speciali e altri casi eccezionali che possono verificarsi.

Diamo un'occhiata ad alcuni di loro:

  • Apache Commons CSV: offerta CSV di Apache per lavorare con file CSV
  • CSV aperto: un'altra libreria CSV popolare e gestita attivamente
  • Flatpack: una libreria CSV open source in fase di sviluppo attivo
  • CSVeed: open source e gestito attivamente

4. Conclusione

In questo rapido articolo, abbiamo mostrato come scrivere un file CSV utilizzando la classe PrintWriter di Java . Successivamente, abbiamo discusso e gestito i caratteri speciali nei dati in uscita.

Dopo il nostro semplice esempio Java, abbiamo esaminato una panoramica delle librerie di terze parti disponibili.

Il codice di esempio è disponibile su GitHub.