Lecture de fichiers CSV avec la bibliothèque OpenCSV
Dans cette étape, nous allons implémenter notre troisième approche pour lire des fichiers CSV en utilisant la bibliothèque OpenCSV. OpenCSV est une bibliothèque tierce qui offre des capacités robustes de parsing (analyse) de CSV, gérant des scénarios complexes tels que des champs contenant des virgules ou des sauts de ligne entourés de guillemets.
Comprendre OpenCSV
OpenCSV est une bibliothèque de parsing de CSV pour Java qui prend en charge toutes les variations de base du format CSV. Contrairement aux approches précédentes, OpenCSV gère correctement les champs entre guillemets contenant des virgules, des sauts de ligne et autres caractères spéciaux qui autrement feraient échouer une simple division par virgules.
Configuration d'OpenCSV
Tout d'abord, téléchargeons la bibliothèque OpenCSV et ses dépendances :
cd ~/project
mkdir -p lib
curl -L -o lib/opencsv-5.7.1.jar https://repo1.maven.org/maven2/com/opencsv/opencsv/5.7.1/opencsv-5.7.1.jar
curl -L -o lib/commons-lang3-3.12.0.jar https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar
curl -L -o lib/commons-text-1.10.0.jar https://repo1.maven.org/maven2/org/apache/commons/commons-text/1.10.0/commons-text-1.10.0.jar
curl -L -o lib/commons-beanutils-1.9.4.jar https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar
curl -L -o lib/commons-collections-3.2.2.jar https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar
curl -L -o lib/commons-logging-1.2.jar https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
Création d'un fichier CSV plus complexe
Créons un fichier CSV plus complexe qui inclut des champs entre guillemets contenant des virgules :
echo 'name,description,price
"Laptop","High-performance laptop, with SSD",999.99
"Smartphone","Latest model, with dual camera",499.99
"Headphones","Noise-canceling, wireless",149.99' > ~/project/products.csv
Implémentation de la lecture de CSV avec OpenCSV
Maintenant, mettons à jour notre fichier CSVReaderDemo.java
pour lire le fichier CSV en utilisant OpenCSV. Remplacez tout le contenu du fichier par le code suivant :
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;
import java.io.FileReader;
import java.io.IOException;
public class CSVReaderDemo {
public static void main(String[] args) {
System.out.println("Reading CSV using OpenCSV");
// Path to our CSV file with complex data
String csvFile = "products.csv";
try (CSVReader reader = new CSVReader(new FileReader(csvFile))) {
// Read and print the header
String[] header = reader.readNext();
if (header != null) {
System.out.println("\nHeader: " + String.join(", ", header));
}
// Read and print each line
String[] nextLine;
int rowNumber = 1;
System.out.println("\nData read from CSV file:");
while ((nextLine = reader.readNext()) != null) {
System.out.println("Row " + rowNumber + ":");
for (int i = 0; i < nextLine.length; i++) {
System.out.println(" " + header[i] + ": " + nextLine[i]);
}
rowNumber++;
System.out.println();
}
} catch (IOException | CsvValidationException e) {
System.err.println("Error reading the CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
Compilons et exécutons notre code mis à jour :
cd ~/project
javac -cp ".:lib/*" -d . src/CSVReaderDemo.java
java -cp ".:lib/*" CSVReaderDemo
Vous devriez voir une sortie similaire à celle-ci :
Reading CSV using OpenCSV
Header: name, description, price
Data read from CSV file:
Row 1:
name: Laptop
description: High-performance laptop, with SSD
price: 999.99
Row 2:
name: Smartphone
description: Latest model, with dual camera
price: 499.99
Row 3:
name: Headphones
description: Noise-canceling, wireless
price: 149.99
Explication du code
- Nous importons les classes nécessaires de la bibliothèque OpenCSV et de l'entrée/sortie Java.
- Nous définissons le chemin vers notre fichier CSV (
products.csv
).
- Nous créons un objet
CSVReader
pour lire le fichier CSV.
- Nous lisons la ligne d'en-tête avec
reader.readNext()
et la stockons pour une utilisation ultérieure.
- Nous lisons ensuite chaque ligne suivante avec
reader.readNext()
dans une boucle jusqu'à ce qu'il n'y ait plus de lignes.
- Pour chaque ligne, nous affichons chaque champ avec son en-tête correspondant.
La bibliothèque OpenCSV gère automatiquement le formatage complexe du CSV, analysant correctement les champs avec des virgules entre guillemets. Cela la rend idéale pour les fichiers CSV du monde réel qui peuvent contenir des données complexes.
Avantages d'OpenCSV
OpenCSV offre plusieurs avantages par rapport aux approches de base :
- Elle gère correctement les champs entre guillemets contenant des virgules, des sauts de ligne et autres caractères spéciaux.
- Elle propose un support intégré pour la lecture dans des beans (objets Java).
- Elle prend en charge des fonctionnalités avancées telles que des séparateurs personnalisés, des caractères de guillemets et des caractères d'échappement.
- Elle gère efficacement les grands fichiers CSV.
Pour la plupart des applications du monde réel qui traitent des fichiers CSV, l'utilisation d'une bibliothèque dédiée comme OpenCSV est l'approche recommandée.