Schreiben von Daten in eine CSV-Datei mit Java

JavaBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie Daten in CSV-Dateien (Comma-Separated Values, deutsch: durch Kommas getrennte Werte) mit Java schreiben können. CSV-Dateien sind ein gängiges Format zum Speichern tabellarischer Daten und werden häufig für den Datenaustausch zwischen verschiedenen Anwendungen verwendet.

Sie werden die OpenCSV-Bibliothek verwenden, die einfache Methoden zum Schreiben und Lesen von CSV-Dateien in Java bietet. Am Ende dieses Labs haben Sie ein Java-Programm erstellt, das Daten in eine neue CSV-Datei schreiben und zusätzliche Daten an eine vorhandene Datei anhängen kann.

Grundlagen von CSV-Dateien und Projektaufbau

CSV (Comma-Separated Values, deutsch: durch Kommas getrennte Werte) ist ein einfaches Dateiformat zum Speichern tabellarischer Daten. Jede Zeile in einer CSV-Datei repräsentiert eine Datenzeile, und die Werte innerhalb einer Zeile werden durch Kommas getrennt. Beispielsweise könnte eine CSV-Datei mit Schülerdaten so aussehen:

Name,Age,Email
John Doe,25,john.doe@example.com
Jane Smith,22,jane.smith@example.com

Beginnen wir damit, ein einfaches Maven-Projekt zur Arbeit mit CSV-Dateien zu erstellen. Maven ist ein Build-Automatisierungstool, das uns bei der Verwaltung der Abhängigkeiten für unser Projekt hilft.

  1. Öffnen Sie zunächst das Terminal in WebIDE und navigieren Sie zum Projektverzeichnis:
cd ~/project/csv-writer
  1. Erstellen Sie im Projektverzeichnis eine neue Datei mit dem Namen pom.xml. Diese Datei definiert die Projektstruktur und die Abhängigkeiten:
touch pom.xml
  1. Öffnen Sie die Datei pom.xml im WebIDE-Editor und fügen Sie den folgenden Inhalt hinzu:
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>csv-writer</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>5.4</version>
        </dependency>
    </dependencies>
</project>

Diese XML-Datei definiert unser Projekt und fügt die OpenCSV-Bibliothek (Version 5.4) als Abhängigkeit hinzu. OpenCSV bietet einfache Klassen zum Lesen und Schreiben von CSV-Dateien.

  1. Erstellen Sie die Verzeichnisstruktur für unseren Java-Quellcode:
mkdir -p src/main/java/com/example

Dieser Befehl erstellt die Standard-Maven-Verzeichnisstruktur für Java-Quellcode.

Erstellen eines einfachen CSV-Schreibprogramms

Nachdem wir unser Projekt mit der OpenCSV-Abhängigkeit eingerichtet haben, können wir ein Java-Programm erstellen, das Daten in eine CSV-Datei schreibt.

  1. Erstellen Sie eine neue Java-Klassen-Datei mit dem Namen CSVWriterExample.java in der Verzeichnisstruktur, die wir zuvor erstellt haben:
touch src/main/java/com/example/CSVWriterExample.java
  1. Öffnen Sie CSVWriterExample.java im WebIDE-Editor und fügen Sie den folgenden Code hinzu:
package com.example;

import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;

public class CSVWriterExample {
    public static void main(String[] args) {
        try {
            // Create a new CSVWriter instance
            // The first parameter is a FileWriter with the file path
            // The second parameter is the separator character (default is comma)
            // The third parameter is the quote character (default is double quote)
            // The fourth parameter is the escape character (default is backslash)
            // The fifth parameter is the line ending (default is newline)
            CSVWriter writer = new CSVWriter(new FileWriter("students.csv"),
                                           CSVWriter.DEFAULT_SEPARATOR,
                                           CSVWriter.DEFAULT_QUOTE_CHARACTER,
                                           CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                           CSVWriter.DEFAULT_LINE_END);

            // Write header line
            String[] header = {"Name", "Age", "Email"};
            writer.writeNext(header);

            // Write data lines
            String[] student1 = {"John Doe", "25", "john.doe@example.com"};
            writer.writeNext(student1);

            String[] student2 = {"Jane Smith", "22", "jane.smith@example.com"};
            writer.writeNext(student2);

            // Close the writer to flush and release resources
            writer.close();

            System.out.println("CSV file created successfully!");

        } catch (IOException e) {
            System.out.println("Error writing to CSV file: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Dieser Code macht Folgendes:

  • Importiert die erforderlichen Klassen aus der OpenCSV-Bibliothek und dem Java-Eingabe/Ausgabe-Paket
  • Erstellt ein CSVWriter-Objekt, das in eine Datei namens students.csv schreibt
  • Schreibt eine Kopfzeile mit Feldnamen
  • Schreibt zwei Zeilen mit Schülerdaten
  • Schließt den Schreiber, um sicherzustellen, dass alle Daten in die Datei geschrieben werden

Der CSVWriter-Konstruktor hat fünf Parameter:

  • FileWriter: Gibt die Datei an, in die geschrieben werden soll
  • Trennzeichen: Das Zeichen, das zum Trennen der Felder verwendet wird (Standard ist Komma)
  • Anführungszeichen: Das Zeichen, das zum Anführen von Feldern verwendet wird (Standard ist doppeltes Anführungszeichen)
  • Escape-Zeichen: Das Zeichen, das zum Escapen von Sonderzeichen verwendet wird (Standard ist Backslash)
  • Zeilenende: Das Zeichen, das zum Beenden von Zeilen verwendet wird (Standard ist Zeilenumbruch)
  1. Kompilieren Sie das Java-Programm mit Maven:
cd ~/project/csv-writer
mvn compile

Dieser Befehl kompiliert unseren Java-Quellcode mithilfe des Maven-Buildsystems.

Ausführen des CSV-Schreibprogramms

Lassen Sie uns unser Java-Programm ausführen, um die CSV-Datei zu erstellen und die Ergebnisse zu sehen.

  1. Führen Sie das kompilierte Java-Programm mit Maven aus:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"

Wenn Sie eine Fehlermeldung über das exec-maven-plugin sehen, müssen wir es zu unserer pom.xml hinzufügen:

  1. Öffnen Sie pom.xml im WebIDE-Editor und aktualisieren Sie es, um das exec-maven-plugin einzuschließen:
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>csv-writer</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>5.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <mainClass>com.example.CSVWriterExample</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  1. Führen Sie das Programm nun erneut aus:
mvn exec:java

Sie sollten in der Terminalausgabe die Nachricht "CSV file created successfully!" sehen.

  1. Lassen Sie uns überprüfen, ob unsere CSV-Datei erstellt wurde und die erwarteten Daten enthält:
cat students.csv

Die Ausgabe sollte den Inhalt der CSV-Datei anzeigen, der in etwa so aussehen wird:

"Name","Age","Email"
"John Doe","25","john.doe@example.com"
"Jane Smith","22","jane.smith@example.com"

Beachten Sie, dass die Ausgabe Anführungszeichen um jedes Feld enthält. Dies ist das Standardverhalten von OpenCSV, das hilft, Felder zu verarbeiten, die Sonderzeichen wie Kommas enthalten.

Hinzufügen von Daten zu einer bestehenden CSV-Datei

Nachdem wir eine CSV-Datei erstellt haben, ändern wir nun unser Java-Programm, um zusätzliche Daten an die vorhandene Datei anzuhängen, anstatt sie zu überschreiben.

  1. Erstellen Sie eine neue Java-Datei mit dem Namen CSVAppendExample.java:
touch src/main/java/com/example/CSVAppendExample.java
  1. Öffnen Sie CSVAppendExample.java im WebIDE-Editor und fügen Sie den folgenden Code hinzu:
package com.example;

import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;

public class CSVAppendExample {
    public static void main(String[] args) {
        try {
            // Create a CSVWriter in append mode by setting the second parameter of FileWriter to true
            CSVWriter writer = new CSVWriter(new FileWriter("students.csv", true));

            // Write additional data to the existing file
            String[] student3 = {"Robert Johnson", "24", "robert.johnson@example.com"};
            writer.writeNext(student3);

            String[] student4 = {"Maria Garcia", "23", "maria.garcia@example.com"};
            writer.writeNext(student4);

            // Close the writer
            writer.close();

            System.out.println("Data appended to CSV file successfully!");

        } catch (IOException e) {
            System.out.println("Error appending to CSV file: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Dieser Code ähnelt unserem vorherigen Beispiel, hat aber zwei wichtige Unterschiede:

  • Wir erstellen den FileWriter mit einem zweiten Parameter, der auf true gesetzt ist, wodurch er im Anhänge-Modus (append mode) arbeitet.
  • Wir schreiben keine Kopfzeile, da die Datei bereits eine hat.
  1. Führen Sie das Programm aus, um Daten an unsere vorhandene CSV-Datei anzuhängen:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
  1. Lassen Sie uns nun den Inhalt unserer CSV-Datei überprüfen:
cat students.csv

Sie sollten die ursprünglichen Daten plus die neu angehängten Datensätze sehen:

"Name","Age","Email"
"John Doe","25","john.doe@example.com"
"Jane Smith","22","jane.smith@example.com"
"Robert Johnson","24","robert.johnson@example.com"
"Maria Garcia","23","maria.garcia@example.com"

Wie Sie sehen können, wurden die neuen Daten am Ende der Datei hinzugefügt, ohne den vorhandenen Inhalt zu stören.

  1. Lassen Sie uns ein weiteres Beispiel erstellen, das das Schreiben von CSV-Dateien mit benutzerdefinierten Trennzeichen zeigt:
touch src/main/java/com/example/CSVCustomExample.java
  1. Öffnen Sie CSVCustomExample.java im WebIDE-Editor und fügen Sie den folgenden Code hinzu:
package com.example;

import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;

public class CSVCustomExample {
    public static void main(String[] args) {
        try {
            // Create a CSVWriter with semicolon as separator instead of comma
            CSVWriter writer = new CSVWriter(new FileWriter("students_semicolon.csv"),
                                           ';',
                                           CSVWriter.DEFAULT_QUOTE_CHARACTER,
                                           CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                           CSVWriter.DEFAULT_LINE_END);

            // Write header line
            String[] header = {"Name", "Age", "Email"};
            writer.writeNext(header);

            // Write data lines
            String[] student1 = {"John Doe", "25", "john.doe@example.com"};
            writer.writeNext(student1);

            String[] student2 = {"Jane Smith", "22", "jane.smith@example.com"};
            writer.writeNext(student2);

            // Close the writer
            writer.close();

            System.out.println("CSV file with semicolon separator created successfully!");

        } catch (IOException e) {
            System.out.println("Error writing to CSV file: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Dieses Beispiel erstellt eine CSV-Datei, die Semikolons als Trennzeichen anstelle von Kommas verwendet. Dies ist in einigen europäischen Ländern üblich, wo Kommas als Dezimaltrennzeichen verwendet werden.

  1. Führen Sie das Beispiel mit benutzerdefiniertem Trennzeichen aus:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
  1. Überprüfen Sie den Inhalt der neuen CSV-Datei:
cat students_semicolon.csv

Sie sollten die CSV-Datei mit Semikolons als Trennzeichen sehen:

"Name";"Age";"Email"
"John Doe";"25";"john.doe@example.com"
"Jane Smith";"22";"jane.smith@example.com"

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie mit Java und der OpenCSV-Bibliothek Daten in CSV-Dateien schreiben können. Sie haben erfolgreich:

  1. Ein Java-Projekt mit der OpenCSV-Abhängigkeit (dependency) eingerichtet
  2. Ein einfaches Java-Programm erstellt, um Daten in eine neue CSV-Datei zu schreiben
  3. Das Programm so modifiziert, dass Daten an eine vorhandene CSV-Datei angehängt werden
  4. Einen benutzerdefinierten CSV-Schreiber (writer) mit einem anderen Trennzeichen erstellt

Diese Fähigkeiten sind für viele Anwendungen nützlich, wie z. B. für den Datenexport, die Berichterstellung und den Datenaustausch zwischen Systemen. CSV ist ein weit verbreitetes Format aufgrund seiner Einfachheit und Kompatibilität mit Tabellenkalkulationssoftware und Datenanalysewerkzeugen.

Einige wichtige Erkenntnisse:

  • Die CSVWriter-Klasse von OpenCSV bietet eine einfache Möglichkeit, CSV-Dateien in Java zu schreiben.
  • Um eine neue CSV-Datei zu erstellen, verwenden Sie new FileWriter(filename) zusammen mit dem CSVWriter.
  • Um an eine vorhandene CSV-Datei anzuhängen, verwenden Sie new FileWriter(filename, true) zusammen mit dem CSVWriter.
  • Schließen Sie den Schreiber immer mit writer.close(), um sicherzustellen, dass alle Daten in die Datei geschrieben werden.
  • Sie können das Trennzeichen, das Anführungszeichen und andere Aspekte des CSV-Formats anpassen.

Mit diesen Grundlagen sollten Sie in der Lage sein, CSV-Schreibfunktionen in Ihre Java-Anwendungen zu integrieren.