Lendo Arquivos CSV Usando a Biblioteca OpenCSV
Nesta etapa, implementaremos nossa terceira abordagem para ler arquivos CSV usando a biblioteca OpenCSV. OpenCSV é uma biblioteca de terceiros que fornece recursos robustos de análise de CSV, lidando com cenários complexos como campos contendo vírgulas ou quebras de linha entre aspas.
Entendendo OpenCSV
OpenCSV é uma biblioteca de análise de CSV para Java que suporta todas as variações básicas do formato CSV. Ao contrário das abordagens anteriores, OpenCSV lida corretamente com campos entre aspas contendo vírgulas, quebras de linha e outros caracteres especiais que, de outra forma, interromperiam a divisão simples por vírgulas.
Configurando OpenCSV
Primeiro, vamos baixar a biblioteca OpenCSV e suas dependências:
cd ~/project
mkdir -p lib
curl -L -o lib/opencsv-5.7.1.jar https://repo1.maven.org/maven2/com/opencsv/opencsv/5.7.1/opencsv-5.7.1.jar
curl -L -o lib/commons-lang3-3.12.0.jar https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar
curl -L -o lib/commons-text-1.10.0.jar https://repo1.maven.org/maven2/org/apache/commons/commons-text/1.10.0/commons-text-1.10.0.jar
curl -L -o lib/commons-beanutils-1.9.4.jar https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils/1.9.4.jar
curl -L -o lib/commons-collections-3.2.2.jar https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar
curl -L -o lib/commons-logging-1.2.jar https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
Criando um Arquivo CSV Mais Complexo
Vamos criar um arquivo CSV mais complexo que inclua campos entre aspas com vírgulas:
echo 'name,description,price
"Laptop","High-performance laptop, with SSD",999.99
"Smartphone","Latest model, with dual camera",499.99
"Headphones","Noise-canceling, wireless",149.99' > ~/project/products.csv
Implementando a Leitura de CSV com OpenCSV
Agora, vamos atualizar nosso arquivo CSVReaderDemo.java para ler o arquivo CSV usando OpenCSV. Substitua todo o conteúdo do arquivo pelo seguinte código:
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;
import java.io.FileReader;
import java.io.IOException;
public class CSVReaderDemo {
public static void main(String[] args) {
System.out.println("Reading CSV using OpenCSV");
// Path to our CSV file with complex data
String csvFile = "products.csv";
try (CSVReader reader = new CSVReader(new FileReader(csvFile))) {
// Read and print the header
String[] header = reader.readNext();
if (header != null) {
System.out.println("\nHeader: " + String.join(", ", header));
}
// Read and print each line
String[] nextLine;
int rowNumber = 1;
System.out.println("\nData read from CSV file:");
while ((nextLine = reader.readNext()) != null) {
System.out.println("Row " + rowNumber + ":");
for (int i = 0; i < nextLine.length; i++) {
System.out.println(" " + header[i] + ": " + nextLine[i]);
}
rowNumber++;
System.out.println();
}
} catch (IOException | CsvValidationException e) {
System.err.println("Error reading the CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
Vamos compilar e executar nosso código atualizado:
cd ~/project
javac -cp ".:lib/*" -d . src/CSVReaderDemo.java
java -cp ".:lib/*" CSVReaderDemo
Você deve ver uma saída semelhante a esta:
Reading CSV using OpenCSV
Header: name, description, price
Data read from CSV file:
Row 1:
name: Laptop
description: High-performance laptop, with SSD
price: 999.99
Row 2:
name: Smartphone
description: Latest model, with dual camera
price: 499.99
Row 3:
name: Headphones
description: Noise-canceling, wireless
price: 149.99
Explicação do Código
- Importamos as classes necessárias da biblioteca OpenCSV e Java I/O.
- Definimos o caminho para o nosso arquivo CSV (
products.csv).
- Criamos um objeto
CSVReader para ler o arquivo CSV.
- Lemos a linha do cabeçalho com
reader.readNext() e a armazenamos para uso posterior.
- Em seguida, lemos cada linha subsequente com
reader.readNext() em um loop até que não haja mais linhas.
- Para cada linha, imprimimos cada campo junto com seu cabeçalho correspondente.
A biblioteca OpenCSV lida com a formatação CSV complexa automaticamente, analisando corretamente os campos com vírgulas entre aspas. Isso o torna ideal para arquivos CSV do mundo real que podem conter dados complexos.
Vantagens do OpenCSV
OpenCSV oferece várias vantagens em relação às abordagens básicas:
- Ele lida corretamente com campos entre aspas contendo vírgulas, quebras de linha e outros caracteres especiais.
- Ele fornece suporte integrado para leitura em beans (objetos Java).
- Ele suporta recursos avançados como separadores personalizados, caracteres de aspas e caracteres de escape.
- Ele lida com arquivos CSV grandes de forma eficiente.
Para a maioria das aplicações do mundo real que lidam com arquivos CSV, usar uma biblioteca dedicada como OpenCSV é a abordagem recomendada.