Trabajo con CSV en Java: bibliotecas OpenCSV y Apache Commons CSV

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con CSV en Java: OpenCSV y Apache Commons CSV



CSV (Valores Separados por Comas) es uno de los formatos más comunes para almacenar e intercambiar datos tabulares. En Java no hay una biblioteca incorporada para trabajar cómodamente con CSV (solo análisis manual a través de BufferedReader), por lo que los desarrolladores utilizan herramientas de terceros. En este artículo, analizaremos dos bibliotecas populares: OpenCSV y Apache Commons CSV. Aprenderá a leer, escribir y procesar archivos CSV con ejemplos de código.



1. OpenCSV: análisis ligero y anotaciones



OpenCSV es una biblioteca simple y eficiente para trabajar con CSV. Admite lectura línea por línea, mapeo a objetos Java (a través de anotaciones @CsvBindByName) y escritura de datos.



Inclusión (Maven)

<dependency>    <groupId>com.opencsv</groupId>    <artifactId>opencsv</artifactId>    <version>5.9</version></dependency>


Lectura de CSV en una lista de cadenas

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)); } } }}


Mapeo a objeto 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 y setters}

// Lecturatry (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()));}


Escritura de 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: flexibilidad y rendimiento



Apache Commons CSV es parte del ecosistema Apache Commons. Se distingue por su alto rendimiento, soporte para diferentes formatos (CSV, TSV, Excel) y delimitadores personalizables.



Inclusión (Maven)

<dependency>    <groupId>org.apache.commons</groupId>    <artifactId>commons-csv</artifactId>    <version>1.11.0</version></dependency>


Lectura de CSV con encabezados

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); }}


Escritura de CSV con delimitador personalizado

import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVPrinter;import java.io.FileWriter;import                    

Recommendations