Arbeiten mit CSV in Java: Überblick über Bibliotheken und Beispiele
CSV (Comma-Separated Values) ist eines der am weitesten verbreiteten Formate für den Austausch von Tabellendaten. Trotz der scheinbaren Einfachheit kann manuelles CSV-Parsing in Java aufgrund von Escape-Sequenzen für Anführungszeichen, verschachtelten Kommas und unterschiedlichen Kodierungen zu Fehlern führen. In diesem Artikel betrachten wir drei Hauptansätze: die Verwendung von OpenCSV, Apache Commons CSV und dem standardmäßigen java.util.Scanner.
1. OpenCSV – flexible und beliebte Bibliothek
OpenCSV ist eine leichte Open-Source-Bibliothek, die das Lesen und Schreiben von CSV, TSV und anderen Trennzeichen unterstützt. Sie verarbeitet automatisch Escape-Sequenzen, Anführungszeichen und mehrzeilige Felder.
Einbindung (Maven)
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.9</version></dependency>Beispiel: CSV in eine Liste von Objekten lesen
import com.opencsv.CSVReader;import com.opencsv.bean.CsvToBean;import com.opencsv.bean.HeaderColumnNameMappingStrategy;import java.io.FileReader;import java.util.List;
public class OpenCSVExample { public static void main(String[] args) throws Exception { try (FileReader reader = new FileReader("users.csv")) { // Manuelles Parsing CSVReader csvReader = new CSVReader(reader); String[] line; while ((line = csvReader.readNext()) != null) { System.out.println("Name: " + line[0] + ", E-Mail: " + line[1]); } } }}Beispiel: Mapping auf Java Bean
public class User { private String name; private String email; // Getter und Setter}
// Lesen mit Mappingtry (FileReader reader = new FileReader("users.csv")) { HeaderColumnNameMappingStrategy<User> strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(User.class);
CsvToBean<User> csvToBean = new CsvToBeanBuilder<User>(reader) .withMappingStrategy(strategy) .build();
List<User> users = csvToBean.parse();}2. Apache Commons CSV – Standard von Apache
Apache Commons CSV ist Teil des Apache Commons-Ökosystems. Es bietet vorgefertigte Formate (RFC 4180, Excel, MySQL) und Stream-Verarbeitung.
Einbindung (Maven)
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.0</version></dependency>Beispiel: Lesen mit Kopfzeilen
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVParser;import org.apache.commons.csv.CSVRecord;import java.io.FileReader;import java.io.Reader;
public class CommonsCSVExample { public static void main(String[] args) throws Exception { try (Reader reader = new FileReader("data.csv"); CSVParser parser = CSVFormat.DEFAULT .withFirstRecordAsHeader() .parse(reader)) {
for (CSVRecord record : parser) { String id = record.get("ID"); String value = record.get("Value"); System.out.println(id + " -> " + value); } } }}CSV schreiben
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVPrinter;import java.io.FileWriter;import java.io.Writer;
try (Writer writer = new FileWriter("output.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader("Name", "Age") .print(writer)) {
printer.printRecord("Alice", 30); printer.printRecord("Bob", 25);} Auch in der Bibliothek
ORM für Kotlin: Vergleich und Beispiele (Exposed, Ktorm, Hibernate)
Testen in Swift (iOS/macOS): Frameworks und Werkzeuge
Gin für Go: Vollständiger Leitfaden mit Beispielen
JSON-Verarbeitung in Kotlin: Bibliotheken und Anwendungsbeispiele