Trabalho com CSV em Java: bibliotecas OpenCSV e Apache Commons CSV

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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                    

Recommendations