Travailler avec CSV en Java : OpenCSV et Apache Commons CSV
CSV (Comma-Separated Values) est l'un des formats les plus courants pour stocker et échanger des données tabulaires. Java ne dispose pas de bibliothèque intégrée pour travailler facilement avec CSV (seulement un parsing manuel via BufferedReader), c'est pourquoi les développeurs utilisent des outils tiers. Dans cet article, nous examinerons deux bibliothèques populaires : OpenCSV et Apache Commons CSV. Vous apprendrez à lire, écrire et traiter des fichiers CSV avec des exemples de code.
1. OpenCSV : parsing léger et annotations
OpenCSV est une bibliothèque simple et efficace pour travailler avec CSV. Elle prend en charge la lecture ligne par ligne, le mappage sur des objets Java (via les annotations @CsvBindByName), ainsi que l'écriture de données.
Ajout de la dépendance (Maven)
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.9</version></dependency>Lecture d'un CSV dans une liste de chaînes
import com.opencsv.CSVReader;import java.io.FileReader;import java.util.List;
public class OpenCsvExample { public static void main(String[] args) throws Exception { try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) { List<String[]> rows = reader.readAll(); for (String[] row : rows) { System.out.println(String.join(" | ", row)); } } }}Mappage sur un objet Java
import com.opencsv.bean.CsvBindByName;import com.opencsv.bean.CsvToBean;import com.opencsv.bean.CsvToBeanBuilder;import java.io.FileReader;import java.util.List;
public class User { @CsvBindByName(column = "name") private String name;
@CsvBindByName(column = "email") private String email;
// getters et setters}
// Lecturetry (FileReader reader = new FileReader("users.csv")) { CsvToBean<User> csvToBean = new CsvToBeanBuilder<User>(reader) .withType(User.class) .withIgnoreLeadingWhiteSpace(true) .build(); List<User> users = csvToBean.parse(); users.forEach(u -> System.out.println(u.getName() + " - " + u.getEmail()));}Écriture d'un CSV
import com.opencsv.CSVWriter;import java.io.FileWriter;
try (CSVWriter writer = new CSVWriter(new FileWriter("output.csv"))) { String[] header = {"Name", "Age", "City"}; writer.writeNext(header); writer.writeNext(new String[]{"Alice", "30", "Moscow"}); writer.writeNext(new String[]{"Bob", "25", "SPb"});}2. Apache Commons CSV : flexibilité et performance
Apache Commons CSV fait partie de l'écosystème Apache Commons. Il se distingue par sa haute performance, sa prise en charge de différents formats (CSV, TSV, Excel) et ses délimiteurs personnalisables.
Ajout de la dépendance (Maven)
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.0</version></dependency>Lecture d'un CSV avec en-têtes
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;
try (Reader in = new FileReader("data.csv"); CSVParser parser = CSVFormat.DEFAULT .withFirstRecordAsHeader() .parse(in)) { for (CSVRecord record : parser) { String name = record.get("name"); String email = record.get("email"); System.out.println(name + " : " + email); }}Écriture d'un CSV avec un délimiteur personnalisé
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVPrinter;import java.io.FileWriter;import Aussi dans la bibliothèque
Travailler avec YAML en C# (.NET) : bibliothèques et exemples d'utilisation
yaml-cpp pour C++ : guide complet avec exemples
PDFKit pour JavaScript (Node.js) : guide complet avec exemples
Client Elasticsearch pour C# (.NET) : NEST et Elastic.Clients.Elasticsearch