So schreiben Sie in eine CSV-Datei in Java

1. Übersicht

In diesem kurzen Tutorial lernen wir, wie man mit Java in eine CSV-Datei schreibt . CSV steht für Comma-Separated-Values ​​und ist ein gängiges Format für die Übertragung von Massendaten zwischen Systemen.

Zum Schreiben unserer CSV-Datei verwenden wir Klassen im Paket java.io.

Wir werden über Sonderzeichen sprechen und wie man damit umgeht. Wir werden darauf abzielen, dass unsere Ausgabedatei in Microsoft Excel und Google Sheets geöffnet wird.

Nach unserem Java-Beispiel werfen wir einen kurzen Blick auf einige verfügbare Bibliotheken von Drittanbietern für die Arbeit mit CSV-Dateien.

2. Schreiben mit PrintWriter

Wir werden einen PrintWriter zum Schreiben unserer CSV-Datei verwenden. Weitere Informationen zur Verwendung von java.io zum Schreiben in eine Datei finden Sie in unserem Artikel zum Schreiben in Dateien.

2.1. CSV schreiben

Lassen Sie uns zunächst ein Verfahren zur Formatierung einer einzelnen Zeile von Daten zu erstellen, als ein Array von vertreten String s:

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

Bevor wir diese Methode aufrufen, bauen wir als nächstes einige Beispieldaten auf:

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\"" });

Und mit diesen Daten konvertieren wir jede Zeile mit convertToCSV und schreiben sie in eine Datei:

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. Umgang mit Sonderzeichen

In einer CSV-Datei sind bestimmte Zeichen problematisch, und als Entwickler haben wir selten die vollständige Kontrolle über die Qualität unserer Daten. Schauen wir uns nun an, wie man mit Sonderzeichen umgeht.

In unserem Beispiel konzentrieren wir uns auf Kommas, Anführungszeichen und neue Zeilen. Felder, die Kommas oder Anführungszeichen enthalten, werden von doppelten Anführungszeichen umgeben, und doppelte Anführungszeichen werden mit doppelten Anführungszeichen maskiert. Wir werden neue Zeilen entfernen und sie jeweils durch Leerzeichen ersetzen.

Welche Zeichen ein Problem darstellen und wie sie behandelt werden sollen, kann je nach Anwendungsfall variieren.

Unsere convertToCSV- Methode ruft die EscapeSpecialCharacters- Methode für jedes Datenelement auf, während ein String erstellt wird.

Implementieren wir jetzt unsere EscapeSpecialCharacters- Methode:

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. Bibliotheken von Drittanbietern

Wie wir in unserem Beispiel gesehen haben, kann das Schreiben einer CSV-Datei kompliziert werden, wenn wir über Sonderzeichen und deren Umgang nachdenken.

Glücklicherweise stehen für die Arbeit mit CSV-Dateien viele Bibliotheken von Drittanbietern zur Verfügung, von denen viele diese Sonderzeichen und andere Ausnahmefälle behandeln.

Schauen wir uns einige davon an:

  • Apache Commons CSV: Das CSV-Angebot von Apache für die Arbeit mit CSV-Dateien
  • Open CSV: Eine weitere beliebte und aktiv gepflegte CSV-Bibliothek
  • Flatpack: Eine Open-Source-CSV-Bibliothek, die aktiv entwickelt wird
  • CSVeed: Open Source und aktiv gepflegt

4. Fazit

In diesem kurzen Artikel haben wir gezeigt, wie eine CSV-Datei mit der PrintWriter- Klasse von Java geschrieben wird . Als nächstes haben wir Sonderzeichen in den ausgegebenen Daten besprochen und behandelt.

Nach unserem einfachen Java-Beispiel haben wir uns eine Übersicht der verfügbaren Bibliotheken von Drittanbietern angesehen.

Der Beispielcode ist über GitHub verfügbar.