Trabalho com CSV em Java: visão geral das bibliotecas e exemplos
CSV (Comma-Separated Values) — um dos formatos mais comuns para troca de dados tabulares. Apesar da aparente simplicidade, o parsing manual de CSV em Java pode levar a erros devido ao escape de aspas, vírgulas aninhadas e diferentes codificações. Neste artigo, veremos três abordagens principais: uso de OpenCSV, Apache Commons CSV e o padrão java.util.Scanner.
1. OpenCSV — biblioteca flexível e popular
OpenCSV — é uma biblioteca leve de código aberto que suporta leitura e escrita de CSV, TSV e outros delimitadores. Ela lida automaticamente com escape, aspas e campos multilinha.
Adicionar dependência (Maven)
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.9</version></dependency>Exemplo: ler CSV para uma 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")) { // Parsing manual CSVReader csvReader = new CSVReader(reader); String[] line; while ((line = csvReader.readNext()) != null) { System.out.println("Nome: " + line[0] + ", Email: " + line[1]); } } }}Exemplo: mapeamento para Java Bean
public class User { private String name; private String email; // getters e setters}
// Leitura com mapeamentotry (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 — padrão da Apache
Apache Commons CSV — parte do ecossistema Apache Commons. Fornece formatos prontos (RFC 4180, Excel, MySQL) e processamento em fluxo.
Adicionar dependência (Maven)
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.0</version></dependency>Exemplo: leitura com cabeçalhos
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("Valor"); System.out.println(id + " -> " + value); } } }}Escrita 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("Nome", "Idade") .print(writer)) {
printer.printRecord("Alice", 30); printer.printRecord("Bob", 25);}