Como Ler um Arquivo CSV em Java: Um Guia Completo
Ler arquivos CSV (Comma Separated Values) em Java é uma tarefa comum em diversas aplicações, desde a manipulação de dados em projetos acadêmicos até o processamento de grandes conjuntos de informações em sistemas empresariais. Este guia abrangente mostrará diferentes métodos para realizar essa tarefa, desde abordagens simples até soluções mais robustas que lidam com diferentes delimitadores e caracteres de escape.
1. Usando a Classe Scanner
(Para arquivos pequenos e simples):
Para arquivos CSV pequenos e com uma estrutura simples, a classe Scanner
oferece uma solução concisa e fácil de entender. Este método é ideal para situações onde você não precisa de tratamento de erros sofisticado ou lidar com grandes volumes de dados.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class LerCSVScanner {
public static void main(String[] args) {
try {
File arquivo = new File("meu_arquivo.csv");
Scanner scanner = new Scanner(arquivo);
scanner.useDelimiter(","); // Define a vírgula como delimitador
while (scanner.hasNextLine()) {
String linha = scanner.nextLine();
String[] valores = linha.split(","); // Separa os valores da linha
for (String valor : valores) {
System.out.print(valor + " ");
}
System.out.println();
}
scanner.close();
} catch (FileNotFoundException e) {
System.err.println("Arquivo não encontrado: " + e.getMessage());
}
}
}
Vantagens: Simples e fácil de implementar. Desvantagens: Não lida eficientemente com arquivos grandes, delimitadores diferentes de vírgula, ou caracteres de escape. Não oferece tratamento de erros robusto.
2. Usando a Biblioteca Apache Commons CSV
(Para maior flexibilidade e robustez):
Para lidar com arquivos CSV complexos, com diferentes delimitadores, caracteres de escape e tratamento de erros mais robusto, a biblioteca Apache Commons CSV
é a solução recomendada. Essa biblioteca oferece um conjunto completo de ferramentas para processar arquivos CSV de forma eficiente e segura. Você precisará adicionar a dependência commons-csv
ao seu projeto (via Maven ou Gradle).
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.List;
public class LerCSVApacheCommons {
public static void main(String[] args) throws IOException {
Reader in = new FileReader("meu_arquivo.csv");
try (CSVParser parser = new CSVParser(in, CSVFormat.DEFAULT.withFirstRecordAsHeader())) {
for (CSVRecord record : parser) {
String nome = record.get("nome"); // Acessa coluna pelo nome da header
String idade = record.get("idade");
System.out.println("Nome: " + nome + ", Idade: " + idade);
}
}
}
}
Vantagens: Maior flexibilidade (diferentes delimitadores, caracteres de escape), tratamento de erros, suporte para headers, processamento eficiente de arquivos grandes. Desvantagens: Requer a inclusão de uma biblioteca externa.
3. Usando Streams (Java 8 ou superior) para processamento eficiente:
Para arquivos CSV muito grandes, o uso de Streams em Java 8 ou superior pode melhorar significativamente o desempenho, permitindo o processamento paralelo e a manipulação eficiente de grandes quantidades de dados. Combine isso com a biblioteca Apache Commons CSV
para uma solução robusta e eficiente.
//Exemplo simplificado, necessita adaptação para integração com Apache Commons CSV e tratamento de erros.
// ... (import necessário)
// ... (código para ler o arquivo com Apache Commons CSV, como mostrado no exemplo anterior) ...
List<CSVRecord> records = parser.getRecords();
records.stream().forEach(record -> {
// Processa cada registro individualmente.
System.out.println(record.get(0)); //acessando a primeira coluna
});
Qual método escolher?
Scanner
: Ideal para arquivos CSV pequenos e simples, para aprendizado ou prototipagem rápida.Apache Commons CSV
: Recomendado para a maioria dos casos, especialmente para arquivos grandes, complexos ou com requisitos de tratamento de erros robusto.- Streams +
Apache Commons CSV
: A melhor opção para arquivos extremamente grandes, onde o desempenho é crítico.
Lembre-se de sempre tratar exceções (como FileNotFoundException
e IOException
) adequadamente para garantir a robustez do seu código. Escolha a abordagem que melhor se adapta às necessidades do seu projeto, levando em consideração o tamanho do arquivo, a complexidade dos dados e os requisitos de desempenho.