Écriture de données dans un fichier CSV en utilisant Java

JavaBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à écrire des données dans des fichiers CSV (Comma-Separated Values, Valeurs séparées par des virgules) en utilisant Java. Les fichiers CSV sont un format courant pour stocker des données tabulaires et sont largement utilisés pour l'échange de données entre différentes applications.

Vous utiliserez la bibliothèque OpenCSV, qui fournit des méthodes simples pour écrire et lire des fichiers CSV en Java. À la fin de ce laboratoire, vous aurez créé un programme Java capable d'écrire des données dans un nouveau fichier CSV et d'ajouter des données supplémentaires à un fichier existant.

Comprendre les fichiers CSV et configurer le projet

CSV (Comma-Separated Values, Valeurs séparées par des virgules) est un format de fichier simple utilisé pour stocker des données tabulaires. Chaque ligne dans un fichier CSV représente une ligne de données, et les valeurs au sein d'une ligne sont séparées par des virgules. Par exemple, un fichier CSV contenant des données sur des étudiants pourrait ressembler à ceci :

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

Commençons par créer un simple projet Maven pour travailler avec des fichiers CSV. Maven est un outil d'automatisation de build qui nous aidera à gérer les dépendances de notre projet.

  1. Tout d'abord, ouvrez le terminal dans WebIDE et accédez au répertoire du projet :
cd ~/project/csv-writer
  1. Créez un nouveau fichier nommé pom.xml dans le répertoire du projet. Ce fichier définira la structure de notre projet et ses dépendances :
touch pom.xml
  1. Ouvrez le fichier pom.xml dans l'éditeur WebIDE et ajoutez le contenu suivant :
<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>

Ce fichier XML définit notre projet et ajoute la bibliothèque OpenCSV (version 5.4) comme dépendance. OpenCSV fournit des classes simples pour lire et écrire des fichiers CSV.

  1. Créez la structure de répertoires pour notre code source Java :
mkdir -p src/main/java/com/example

Cette commande crée la structure de répertoires standard Maven pour le code source Java.

Création d'un programme simple d'écriture dans un fichier CSV

Maintenant que nous avons configuré notre projet avec la dépendance OpenCSV, nous pouvons créer un programme Java qui écrit des données dans un fichier CSV.

  1. Créez un nouveau fichier de classe Java nommé CSVWriterExample.java dans la structure de répertoires que nous avons créée précédemment :
touch src/main/java/com/example/CSVWriterExample.java
  1. Ouvrez CSVWriterExample.java dans l'éditeur WebIDE et ajoutez le code suivant :
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 {
            // Crée une nouvelle instance de CSVWriter
            // Le premier paramètre est un FileWriter avec le chemin du fichier
            // Le deuxième paramètre est le caractère de séparation (par défaut, une virgule)
            // Le troisième paramètre est le caractère de guillemet (par défaut, le guillemet double)
            // Le quatrième paramètre est le caractère d'échappement (par défaut, l'antislash)
            // Le cinquième paramètre est le caractère de fin de ligne (par défaut, le saut de ligne)
            CSVWriter writer = new CSVWriter(new FileWriter("students.csv"),
                                           CSVWriter.DEFAULT_SEPARATOR,
                                           CSVWriter.DEFAULT_QUOTE_CHARACTER,
                                           CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                           CSVWriter.DEFAULT_LINE_END);

            // Écrit la ligne d'en-tête
            String[] header = {"Name", "Age", "Email"};
            writer.writeNext(header);

            // Écrit les lignes de données
            String[] student1 = {"John Doe", "25", "john.doe@example.com"};
            writer.writeNext(student1);

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

            // Ferme le writer pour vider le tampon et libérer les ressources
            writer.close();

            System.out.println("Fichier CSV créé avec succès !");

        } catch (IOException e) {
            System.out.println("Erreur lors de l'écriture dans le fichier CSV : " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Ce code effectue les opérations suivantes :

  • Importe les classes nécessaires de la bibliothèque OpenCSV et du package d'entrée/sortie Java
  • Crée un objet CSVWriter qui écrira dans un fichier nommé students.csv
  • Écrit une ligne d'en-tête avec les noms des champs
  • Écrit deux lignes de données sur des étudiants
  • Ferme le writer pour s'assurer que toutes les données sont écrites dans le fichier

Le constructeur de CSVWriter a cinq paramètres :

  • FileWriter : Spécifie le fichier dans lequel écrire
  • Caractère de séparation : Le caractère utilisé pour séparer les champs (par défaut, une virgule)
  • Caractère de guillemet : Le caractère utilisé pour citer les champs (par défaut, le guillemet double)
  • Caractère d'échappement : Le caractère utilisé pour échapper les caractères spéciaux (par défaut, l'antislash)
  • Caractère de fin de ligne : Le caractère utilisé pour terminer les lignes (par défaut, le saut de ligne)
  1. Compilez le programme Java en utilisant Maven :
cd ~/project/csv-writer
mvn compile

Cette commande compile notre code source Java en utilisant le système de build Maven.

Exécution du programme d'écriture dans un fichier CSV

Exécutons notre programme Java pour créer le fichier CSV et voir les résultats.

  1. Exécutez le programme Java compilé en utilisant Maven :
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"

Si vous voyez un message d'erreur concernant le exec-maven-plugin, nous devons l'ajouter à notre pom.xml :

  1. Ouvrez pom.xml dans l'éditeur WebIDE et mettez-le à jour pour inclure le exec-maven-plugin :
<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. Exécutez maintenant le programme à nouveau :
mvn exec:java

Vous devriez voir le message "CSV file created successfully!" dans la sortie du terminal.

  1. Vérifions que notre fichier CSV a été créé et contient les données attendues :
cat students.csv

La sortie devrait afficher le contenu du fichier CSV, qui ressemblera à ceci :

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

Notez que la sortie inclut des caractères de guillemet autour de chaque champ. C'est le comportement par défaut d'OpenCSV, qui permet de gérer les champs contenant des caractères spéciaux tels que des virgules.

Ajout de données à un fichier CSV existant

Maintenant que nous avons créé un fichier CSV, modifions notre programme Java pour ajouter des données supplémentaires au fichier existant au lieu de le remplacer.

  1. Créez un nouveau fichier Java nommé CSVAppendExample.java :
touch src/main/java/com/example/CSVAppendExample.java
  1. Ouvrez CSVAppendExample.java dans l'éditeur WebIDE et ajoutez le code suivant :
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 {
            // Crée un CSVWriter en mode ajout en définissant le deuxième paramètre de FileWriter sur true
            CSVWriter writer = new CSVWriter(new FileWriter("students.csv", true));

            // Écrit des données supplémentaires dans le fichier existant
            String[] student3 = {"Robert Johnson", "24", "robert.johnson@example.com"};
            writer.writeNext(student3);

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

            // Ferme le writer
            writer.close();

            System.out.println("Données ajoutées au fichier CSV avec succès !");

        } catch (IOException e) {
            System.out.println("Erreur lors de l'ajout de données au fichier CSV : " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Ce code est similaire à notre exemple précédent, mais avec deux différences importantes :

  • Nous créons le FileWriter avec un deuxième paramètre défini sur true, ce qui le met en mode ajout
  • Nous n'écrivons pas de ligne d'en-tête, car le fichier en a déjà une
  1. Exécutez le programme pour ajouter des données à notre fichier CSV existant :
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
  1. Vérifions le contenu de notre fichier CSV maintenant :
cat students.csv

Vous devriez voir les données originales plus les enregistrements nouvellement ajoutés :

"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"

Comme vous pouvez le voir, les nouvelles données ont été ajoutées à la fin du fichier sans perturber le contenu existant.

  1. Créons un autre exemple qui montre comment écrire des fichiers CSV avec des séparateurs personnalisés :
touch src/main/java/com/example/CSVCustomExample.java
  1. Ouvrez CSVCustomExample.java dans l'éditeur WebIDE et ajoutez le code suivant :
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 {
            // Crée un CSVWriter avec un point-virgule comme séparateur au lieu d'une virgule
            CSVWriter writer = new CSVWriter(new FileWriter("students_semicolon.csv"),
                                           ';',
                                           CSVWriter.DEFAULT_QUOTE_CHARACTER,
                                           CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                           CSVWriter.DEFAULT_LINE_END);

            // Écrit la ligne d'en-tête
            String[] header = {"Name", "Age", "Email"};
            writer.writeNext(header);

            // Écrit les lignes de données
            String[] student1 = {"John Doe", "25", "john.doe@example.com"};
            writer.writeNext(student1);

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

            // Ferme le writer
            writer.close();

            System.out.println("Fichier CSV avec point-virgule comme séparateur créé avec succès !");

        } catch (IOException e) {
            System.out.println("Erreur lors de l'écriture dans le fichier CSV : " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Cet exemple crée un fichier CSV en utilisant des points-virgules comme séparateurs au lieu de virgules, ce qui est courant dans certains pays européens où les virgules sont utilisées comme séparateurs décimaux.

  1. Exécutez l'exemple avec le séparateur personnalisé :
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
  1. Vérifiez le contenu du nouveau fichier CSV :
cat students_semicolon.csv

Vous devriez voir le fichier CSV avec des points-virgules comme séparateurs :

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

Résumé

Dans ce laboratoire, vous avez appris à écrire des données dans des fichiers CSV en utilisant Java avec la bibliothèque OpenCSV. Vous avez réussi à :

  1. Configurer un projet Java avec la dépendance OpenCSV
  2. Créer un programme Java de base pour écrire des données dans un nouveau fichier CSV
  3. Modifier le programme pour ajouter des données à un fichier CSV existant
  4. Créer un écrivain CSV personnalisé avec un caractère de séparation différent

Ces compétences sont utiles pour de nombreuses applications, telles que l'exportation de données, la génération de rapports et l'échange de données entre systèmes. Le format CSV est largement utilisé en raison de sa simplicité et de sa compatibilité avec les logiciels de tableur et les outils d'analyse de données.

Voici quelques points clés à retenir :

  • La classe CSVWriter d'OpenCSV offre un moyen simple d'écrire des fichiers CSV en Java
  • Pour créer un nouveau fichier CSV, utilisez new FileWriter(filename) avec le CSVWriter
  • Pour ajouter des données à un fichier CSV existant, utilisez new FileWriter(filename, true) avec le CSVWriter
  • Toujours fermer le writer en utilisant writer.close() pour vous assurer que toutes les données sont écrites dans le fichier
  • Vous pouvez personnaliser le séparateur, le caractère de guillemet et d'autres aspects du format CSV

Avec ces bases, vous devriez être en mesure d'intégrer des fonctionnalités d'écriture de CSV dans vos applications Java.