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 También en la biblioteca
msw para TypeScript: guía completa con ejemplos prácticos
Envío de correo electrónico en Kotlin: bibliotecas y ejemplos de código
Biblioteca Estándar de Java (Java Standard Library)
Trabajo con XML en Swift: análisis, creación y procesamiento de datos (iOS/macOS)