Escribir datos en un archivo CSV utilizando Java

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo escribir datos en archivos CSV (Comma-Separated Values, Valores Separados por Comas) utilizando Java. Los archivos CSV son un formato común para almacenar datos tabulares y se utilizan ampliamente para el intercambio de datos entre diferentes aplicaciones.

Utilizarás la biblioteca OpenCSV, que proporciona métodos sencillos para escribir y leer archivos CSV en Java. Al final de este laboratorio, habrás creado un programa Java que pueda escribir datos en un nuevo archivo CSV y agregar datos adicionales a un archivo existente.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java/BasicSyntaxGroup -.-> java/output("Output") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("Packages / API") java/FileandIOManagementGroup -.-> java/files("Files") java/FileandIOManagementGroup -.-> java/create_write_files("Create/Write Files") java/FileandIOManagementGroup -.-> java/io("IO") subgraph Lab Skills java/output -.-> lab-117458{{"Escribir datos en un archivo CSV utilizando Java"}} java/packages_api -.-> lab-117458{{"Escribir datos en un archivo CSV utilizando Java"}} java/files -.-> lab-117458{{"Escribir datos en un archivo CSV utilizando Java"}} java/create_write_files -.-> lab-117458{{"Escribir datos en un archivo CSV utilizando Java"}} java/io -.-> lab-117458{{"Escribir datos en un archivo CSV utilizando Java"}} end

Comprender los archivos CSV y configurar el proyecto

CSV (Comma-Separated Values, Valores Separados por Comas) es un formato de archivo simple utilizado para almacenar datos tabulares. Cada línea en un archivo CSV representa una fila de datos, y los valores dentro de una fila están separados por comas. Por ejemplo, un archivo CSV que contiene datos de estudiantes podría verse así:

Name,Age,Email
John Doe,25,[email protected]
Jane Smith,22,[email protected]

Comencemos creando un proyecto Maven simple para trabajar con archivos CSV. Maven es una herramienta de automatización de compilación que nos ayudará a gestionar las dependencias de nuestro proyecto.

  1. Primero, abre la terminal en WebIDE y navega hasta el directorio del proyecto:
cd ~/project/csv-writer
  1. Crea un nuevo archivo llamado pom.xml en el directorio del proyecto. Este archivo definirá la estructura y las dependencias de nuestro proyecto:
touch pom.xml
  1. Abre el archivo pom.xml en el editor de WebIDE y agrega el siguiente contenido:
<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>

Este archivo XML define nuestro proyecto y agrega la biblioteca OpenCSV (versión 5.4) como una dependencia. OpenCSV proporciona clases simples para leer y escribir archivos CSV.

  1. Crea la estructura de directorios para nuestro código fuente Java:
mkdir -p src/main/java/com/example

Este comando crea la estructura de directorios estándar de Maven para el código fuente Java.

Crear un programa simple de escritura de archivos CSV

Ahora que hemos configurado nuestro proyecto con la dependencia de OpenCSV, podemos crear un programa Java que escriba datos en un archivo CSV.

  1. Crea un nuevo archivo de clase Java llamado CSVWriterExample.java en la estructura de directorios que creamos anteriormente:
touch src/main/java/com/example/CSVWriterExample.java
  1. Abre CSVWriterExample.java en el editor de WebIDE y agrega el siguiente código:
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 {
            // Create a new CSVWriter instance
            // The first parameter is a FileWriter with the file path
            // The second parameter is the separator character (default is comma)
            // The third parameter is the quote character (default is double quote)
            // The fourth parameter is the escape character (default is backslash)
            // The fifth parameter is the line ending (default is newline)
            CSVWriter writer = new CSVWriter(new FileWriter("students.csv"),
                                           CSVWriter.DEFAULT_SEPARATOR,
                                           CSVWriter.DEFAULT_QUOTE_CHARACTER,
                                           CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                           CSVWriter.DEFAULT_LINE_END);

            // Write header line
            String[] header = {"Name", "Age", "Email"};
            writer.writeNext(header);

            // Write data lines
            String[] student1 = {"John Doe", "25", "[email protected]"};
            writer.writeNext(student1);

            String[] student2 = {"Jane Smith", "22", "[email protected]"};
            writer.writeNext(student2);

            // Close the writer to flush and release resources
            writer.close();

            System.out.println("CSV file created successfully!");

        } catch (IOException e) {
            System.out.println("Error writing to CSV file: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Este código hace lo siguiente:

  • Importa las clases necesarias de la biblioteca OpenCSV y del paquete de E/S de Java.
  • Crea un objeto CSVWriter que escribirá en un archivo llamado students.csv.
  • Escribe una fila de encabezado con los nombres de los campos.
  • Escribe dos filas de datos de estudiantes.
  • Cierra el escritor para garantizar que todos los datos se escriban en el archivo.

El constructor de CSVWriter tiene cinco parámetros:

  • FileWriter: Especifica el archivo en el que se escribirá.
  • Carácter separador: El carácter utilizado para separar los campos (por defecto es la coma).
  • Carácter de comillas: El carácter utilizado para poner comillas a los campos (por defecto es la comilla doble).
  • Carácter de escape: El carácter utilizado para escapar caracteres especiales (por defecto es la barra invertida).
  • Final de línea: El carácter utilizado para finalizar las líneas (por defecto es el salto de línea).
  1. Compila el programa Java utilizando Maven:
cd ~/project/csv-writer
mvn compile

Este comando compila nuestro código fuente Java utilizando el sistema de compilación de Maven.

Ejecutar el programa de escritura de archivos CSV

Ejecutemos nuestro programa Java para crear el archivo CSV y ver los resultados.

  1. Ejecuta el programa Java compilado utilizando Maven:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"

Si ves un mensaje de error sobre el exec-maven-plugin, necesitamos agregarlo a nuestro pom.xml:

  1. Abre pom.xml en el editor de WebIDE y actualízalo para incluir el 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. Ahora ejecuta el programa nuevamente:
mvn exec:java

Deberías ver el mensaje "CSV file created successfully!" en la salida del terminal.

  1. Verifiquemos que nuestro archivo CSV se haya creado y contenga los datos esperados:
cat students.csv

La salida debería mostrar el contenido del archivo CSV, que será algo como:

"Name","Age","Email"
"John Doe","25","[email protected]"
"Jane Smith","22","[email protected]"

Observa que la salida incluye comillas alrededor de cada campo. Este es el comportamiento predeterminado de OpenCSV, que ayuda a manejar campos que contienen caracteres especiales como comas.

Agregar datos a un archivo CSV existente

Ahora que hemos creado un archivo CSV, modifiquemos nuestro programa Java para agregar datos adicionales al archivo existente en lugar de sobrescribirlo.

  1. Crea un nuevo archivo Java llamado CSVAppendExample.java:
touch src/main/java/com/example/CSVAppendExample.java
  1. Abre CSVAppendExample.java en el editor de WebIDE y agrega el siguiente código:
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 {
            // Create a CSVWriter in append mode by setting the second parameter of FileWriter to true
            CSVWriter writer = new CSVWriter(new FileWriter("students.csv", true));

            // Write additional data to the existing file
            String[] student3 = {"Robert Johnson", "24", "[email protected]"};
            writer.writeNext(student3);

            String[] student4 = {"Maria Garcia", "23", "[email protected]"};
            writer.writeNext(student4);

            // Close the writer
            writer.close();

            System.out.println("Data appended to CSV file successfully!");

        } catch (IOException e) {
            System.out.println("Error appending to CSV file: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Este código es similar al ejemplo anterior, pero con dos diferencias importantes:

  • Creamos el FileWriter con un segundo parámetro establecido en true, lo que lo pone en modo de adición (append mode).
  • No escribimos una fila de encabezado, ya que el archivo ya tiene una.
  1. Ejecuta el programa para agregar datos a nuestro archivo CSV existente:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
  1. Veamos el contenido de nuestro archivo CSV ahora:
cat students.csv

Deberías ver los datos originales más los registros recién agregados:

"Name","Age","Email"
"John Doe","25","[email protected]"
"Jane Smith","22","[email protected]"
"Robert Johnson","24","[email protected]"
"Maria Garcia","23","[email protected]"

Como puedes ver, los nuevos datos se agregaron al final del archivo sin alterar el contenido existente.

  1. Creemos un ejemplo más que demuestre cómo escribir archivos CSV con separadores personalizados:
touch src/main/java/com/example/CSVCustomExample.java
  1. Abre CSVCustomExample.java en el editor de WebIDE y agrega el siguiente código:
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 {
            // Create a CSVWriter with semicolon as separator instead of comma
            CSVWriter writer = new CSVWriter(new FileWriter("students_semicolon.csv"),
                                           ';',
                                           CSVWriter.DEFAULT_QUOTE_CHARACTER,
                                           CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                           CSVWriter.DEFAULT_LINE_END);

            // Write header line
            String[] header = {"Name", "Age", "Email"};
            writer.writeNext(header);

            // Write data lines
            String[] student1 = {"John Doe", "25", "[email protected]"};
            writer.writeNext(student1);

            String[] student2 = {"Jane Smith", "22", "[email protected]"};
            writer.writeNext(student2);

            // Close the writer
            writer.close();

            System.out.println("CSV file with semicolon separator created successfully!");

        } catch (IOException e) {
            System.out.println("Error writing to CSV file: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Este ejemplo crea un archivo CSV utilizando punto y coma como separadores en lugar de comas, lo cual es común en algunos países europeos donde se utilizan las comas como separadores decimales.

  1. Ejecuta el ejemplo con separador personalizado:
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
  1. Verifica el contenido del nuevo archivo CSV:
cat students_semicolon.csv

Deberías ver el archivo CSV con punto y coma como separadores:

"Name";"Age";"Email"
"John Doe";"25";"[email protected]"
"Jane Smith";"22";"[email protected]"

Resumen

En este laboratorio, aprendiste cómo escribir datos en archivos CSV utilizando Java con la biblioteca OpenCSV. Lograste lo siguiente con éxito:

  1. Configuraste un proyecto Java con la dependencia de OpenCSV.
  2. Creaste un programa Java básico para escribir datos en un nuevo archivo CSV.
  3. Modificaste el programa para agregar datos a un archivo CSV existente.
  4. Creaste un escritor de CSV personalizado con un carácter separador diferente.

Estas habilidades son útiles para muchas aplicaciones, como la exportación de datos, la generación de informes y el intercambio de datos entre sistemas. El formato CSV es ampliamente utilizado debido a su simplicidad y compatibilidad con software de hojas de cálculo y herramientas de análisis de datos.

Algunos puntos clave a recordar:

  • La clase CSVWriter de OpenCSV proporciona una forma fácil de escribir archivos CSV en Java.
  • Para crear un nuevo archivo CSV, utiliza new FileWriter(filename) con el CSVWriter.
  • Para agregar datos a un archivo CSV existente, utiliza new FileWriter(filename, true) con el CSVWriter.
  • Siempre cierra el escritor utilizando writer.close() para garantizar que todos los datos se escriban en el archivo.
  • Puedes personalizar el separador, el carácter de comillas y otros aspectos del formato CSV.

Con estos conceptos básicos, deberías poder incorporar capacidades de escritura de CSV en tus aplicaciones Java.