Trabajo con CSV en Java: resumen de bibliotecas y ejemplos
CSV (Valores Separados por Comas) es uno de los formatos más comunes para el intercambio de datos tabulares. A pesar de su aparente simplicidad, el análisis sintáctico manual de CSV en Java puede provocar errores debido al escape de comillas, comas anidadas y diferentes codificaciones. En este artículo, analizaremos tres enfoques principales: el uso de OpenCSV, Apache Commons CSV y el estándar java.util.Scanner.
1. OpenCSV — biblioteca flexible y popular
OpenCSV es una biblioteca ligera de código abierto que admite la lectura y escritura de CSV, TSV y otros delimitadores. Maneja automáticamente el escape, las comillas y los campos multilínea.
Inclusión (Maven)
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.9</version></dependency>Ejemplo: lectura de CSV a una lista de objetos
import com.opencsv.CSVReader;import com.opencsv.bean.CsvToBean;import com.opencsv.bean.HeaderColumnNameMappingStrategy;import java.io.FileReader;import java.util.List;
public class OpenCSVExample { public static void main(String[] args) throws Exception { try (FileReader reader = new FileReader("users.csv")) { // Análisis sintáctico manual CSVReader csvReader = new CSVReader(reader); String[] line; while ((line = csvReader.readNext()) != null) { System.out.println("Name: " + line[0] + ", Email: " + line[1]); } } }}Ejemplo: mapeo a Java Bean
public class User { private String name; private String email; // getters y setters}
// Lectura con mapeotry (FileReader reader = new FileReader("users.csv")) { HeaderColumnNameMappingStrategy<User> strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(User.class);
CsvToBean<User> csvToBean = new CsvToBeanBuilder<User>(reader) .withMappingStrategy(strategy) .build();
List<User> users = csvToBean.parse();}2. Apache Commons CSV — estándar de Apache
Apache Commons CSV es parte del ecosistema Apache Commons. Proporciona formatos predefinidos (RFC 4180, Excel, MySQL) y procesamiento en flujo.
Inclusión (Maven)
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.0</version></dependency>Ejemplo: lectura 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;
public class CommonsCSVExample { public static void main(String[] args) throws Exception { try (Reader reader = new FileReader("data.csv"); CSVParser parser = CSVFormat.DEFAULT .withFirstRecordAsHeader() .parse(reader)) {
for (CSVRecord record : parser) { String id = record.get("ID"); String value = record.get("Value"); System.out.println(id + " -> " + value); } } }}Escritura de CSV
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVPrinter;import java.io.FileWriter;import java.io.Writer;
try (Writer writer = new FileWriter("output.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader("Name", "Age") .print(writer)) {
printer.printRecord("Alice", 30); printer.printRecord("Bob", 25);} También en la biblioteca
Procesamiento y edición de imágenes en TypeScript: Jimp, Sharp, Canvas
OkHttp para Java: guía completa con ejemplos prácticos
Autorización y autenticación en TypeScript: guía completa
SwiftLint para Swift: guía completa con ejemplos prácticos
Contenedor de Dependency Injection para Go (Golang) — wire, dig, fx