19. April 2024

Java: CSV Comma Separated Values in eine Datei exportieren

Das CSV Format ist ein sehr einfaches und flexibles Format um Datensätze zu exportieren. Viele Anwendungen wie Tabellenkalkulationsprogramme können das CSV Format verarbeiten.

Hier finden Sie eine Implementierung in Java mit der Sie CSV Dateien exportieren können. Sie können diese Klasse ganz einfach in Ihr Programm einbauen und Ihren Gegebenheiten anpassen.

Danach finden Sie einige weitere nützliche Hinweise, die man beim Umgang und export von CSV Dateien beachten sollte und Inkompatibilitäten und Konflikte zu vermeiden.

CSV Export in Java

Folgende Klasse können Sie in Ihr Projekt ganz einfach einbauen und erweitern:

Es wird davon ausgegangen, dass die Daten in zweidimensionaler Form als Liste von Listen vorliegen (z.B. eine Integer Matrix).

Der Datentyp dieser Implementierung kann auch leicht ersetzt werden. Beachten Sie, das die .toString()-Methode verwendet wird. Dies mag nicht immer den gewünschten Effekt haben.

Die Klasse CsvWriter schreibt die Listen jeweils Kommasepariert in eine Zeile. Bei einer neuen Liste wird ein Zeilenumbruch erzeugt.

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

/**
 *
 * @author Matthias Schoepe - Computer-Masters.de
 */
public class CsvWriter {

    private final String CRLF = "\r\n";
    private String delimiter = ",";

    public void setDelimiter(String delimiter) {
        this.delimiter = delimiter;
    }

    public void exportCsv(List<List<Integer>> twoDimensionalData, String filename) {
        try {
            FileWriter writer = new FileWriter(filename);

            for (int i = 0; i < twoDimensionalData.size(); i++) {
                for (int j = 0; j < twoDimensionalData.get(i).size(); j++) {
                    writer.append(
                            //Vorsicht hier wird die toString Methode verwendet!
                            twoDimensionalData.get(i).get(j).toString()
                            //Falls diese nicht passend implementiert ist, muss eine Alternative verwendet werden.
                            );
                
                    //Das Trennzeichen einfuegen
                    if (j < twoDimensionalData.get(i).size() - 1) {
                        writer.append(delimiter);
                    }
                }
                //Das Trennzeichen und das Zeilenende einfuegen
                if (i < twoDimensionalData.size() - 1) {
                    writer.append(delimiter + CRLF);
                }
            }

            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} 

Die Klasse CsvWriter lässt sich ganz einfach verwenden, wie dieses Beispiel zeigt:

 //Instanziieren des CsvWriters
 CsvWriter writer = new CsvWriter();
        
        //Beispieldaten als Liste von Listen erzeugen
        Random random = new Random(42);
        List<List<Integer>> test2DimData = new ArrayList<>();
        for(int i=0; i<100; i++) {
            test2DimData.add(new ArrayList<Integer>());
            for(int j=0; j<100; j++) {
                test2DimData.get(i).add(random.nextInt());
            }
        }
        
    //Und ganz einfach als CSV Exportieren
    writer.exportCsv(test2DimData, "testExport.csv"); 

Weiteres über CSV Dateien

Beim Umgang mit CSV Dateien sind einige Dinge zu beachten:

CSV ist eine Abkürzung für Comma Separated Values. Dieser Name impliziert auch schon gleich den Hauptgedanken dieses Formats: Datensätze sollen Kommasepariert in Dateien geschrieben werden.

Allerdings sind auch andere Trennzeichen als Kommata erlaubt. Häufig findet auch der Tabulator „\t“ oder das Semikolon „;“ verwendung. Weiterhin hat ein Zeilenumbruch auch eine besondere Bedeutung (Carriage Return, Line Feed „\r\n“).

Bei der Wahl des Trennzeichens sind prinzipiell keine Grenzen gesetzt. Wichtig ist nur, dass das Zeichen auch in der Kodierung (ASCII, UTF-8, …) in der die Datei abgespeichert wird existiert.

Weiterhin darf das Trennzeichen keine Konflikte mit den Datensätzen hervorrufen: Arbeitet man zum Beispiel mit Kommazahlen, so muss unterscheidbar bleiben, ob es sich um einen neuen Datensatz handelt, oder um die Nach“komma“stellen einer Zahl. Beispiel:

1234,567 , 789,2139 würde als 1234 und 567 und 789 und 2139 interpretiert werden,

1234.567 , 789.2139 würde als 1234.567 und 789.2139 interpretiert werden.

Falls es doch unausweichlich ist, dass ein Trennzeichen in einem Datensatz verwendet werden muss (z.B. Bei Texten), so kann man dieses mit einem sogenannten Maskierungszeichen kennzeichnen. Hierfür bieten sich doppelte Anführungszeichen “ oder einfache Anführungszeichen ‚ an.

Import von CSV Dateien

CSV Import in LibreOffice Calc

CSV-Dateien lassen sich mit vielen Programmen importieren (so z.B. Tabellenkalkulationsprogramme wie Excel oder OpenOffice/LibreOffice Calc).

Dabei ist zu beachten, dass die unterschiedlichen Programme CSV unterschiedlich interpretieren. Man sollte sich also vorher mit den Konventionen des konkreten Programms befassen.

LibreOffice/OpenOffice Calc und Microsoft Excel bieten beim Öffnen einer CSV einen Dialog mit einigen Einstellungsmöglichkeiten zur Interpretation und Kodierung der Datei an. Ein Screenshot des Dialogs von LibreOffice Calc ist auf der linken Seite zu sehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert