Travailler avec CSV en Java : bibliothèques OpenCSV et Apache Commons CSV

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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                    

Recommendations