Trabalho com CSV em Java: OpenCSV e Apache Commons CSV
CSV (Comma-Separated Values) — um dos formatos mais comuns para armazenar e trocar dados tabulares. Em Java não há uma biblioteca nativa para trabalhar convenientemente com CSV (apenas parsing manual via BufferedReader), por isso os desenvolvedores utilizam ferramentas de terceiros. Neste artigo, veremos duas bibliotecas populares: OpenCSV e Apache Commons CSV. Você aprenderá a ler, escrever e processar arquivos CSV com exemplos de código.
1. OpenCSV: parsing leve e anotações
OpenCSV é uma biblioteca simples e eficiente para trabalhar com CSV. Ela suporta leitura linha a linha, mapeamento para objetos Java (através de anotações @CsvBindByName), além de escrita de dados.
Adicionar dependência (Maven)
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.9</version></dependency>Leitura de CSV para lista de linhas
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)); } } }}Mapeamento para 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 e setters}
// Leituratry (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()));}Escrita 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: flexibilidade e desempenho
Apache Commons CSV — parte do ecossistema Apache Commons. Destaca-se pelo alto desempenho, suporte a diferentes formatos (CSV, TSV, Excel) e delimitadores customizáveis.
Adicionar dependência (Maven)
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.0</version></dependency>Leitura de CSV 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;
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); }}Escrita de CSV com delimitador customizado
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVPrinter;import java.io.FileWriter;import Também na biblioteca
Agendador de tarefas em Go (Golang): guia para implementação de tarefas cron
Cache em Swift (iOS/macOS): Redis, NSCache e Core Data
Symfony/EventDispatcher para PHP: guia completo com exemplos