Lendo um arquivo CSV em uma matriz

Lendo um arquivo CSV em uma matriz

1. Visão geral

Simplificando, um arquivo CSV (valores separados por vírgula) contém informações organizadas separadas por um delimitador de vírgula.

Neste tutorial, veremos maneiras diferentes de ler um arquivo CSV em uma matriz.

2. BufferedReader emjava.io

Primeiro, vamos ler os registros linha por linha usandoreadLine() emBufferedReader. Em seguida, dividiremos a linha em tokens com base no delimitador de vírgula.

List> records = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader("book.csv"))) {
    String line;
    while ((line = br.readLine()) != null) {
        String[] values = line.split(COMMA_DELIMITER);
        records.add(Arrays.asList(values));
    }
}

Observe com esta abordagem, CSVs mais sofisticados (por exemplo citando ou incluindo vírgulas como valores) não serão analisados ​​conforme o esperado.

3. Scanner emjava.util

Em seguida, vamos usar umjava.util.Scanner para percorrer o conteúdo do arquivo e recuperar as linhas em série, uma por uma:

List> records = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("book.csv"));) {
    while (scanner.hasNextLine()) {
        records.add(getRecordFromLine(scanner.nextLine()));
    }
}

Então vamos analisar as linhas e armazená-las em uma matriz:

private List getRecordFromLine(String line) {
    List values = new ArrayList();
    try (Scanner rowScanner = new Scanner(line)) {
        rowScanner.useDelimiter(COMMA_DELIMITER);
        while (rowScanner.hasNext()) {
            values.add(rowScanner.next());
        }
    }
    return values;
}

Como antes, com essa abordagem, CSVs mais sofisticados não serão analisados ​​conforme o esperado.

4. OpenCSV

Podemos lidar com arquivos CSV mais complexos com o OpenCSV.

OpenCSV is a third party library which provides an API to work with CSV files. Usaremos o métodoreadNext() emCSVReader para ler os registros no arquivo:

List> records = new ArrayList>();
try (CSVReader csvReader = new CSVReader(new FileReader("book.csv"));) {
    String[] values = null;
    while ((values = csvReader.readNext()) != null) {
        records.add(Arrays.asList(values));
    }
}

Para se aprofundar e aprender mais sobre o OpenCSV, podemos verificar nossoOpenCSV tutorial.

5. Conclusão

Neste tutorial rápido, exploramos maneiras diferentes de ler um arquivo CSV em uma matriz.

Como sempre, o código-fonte completo dos exemplos está disponívelover on GitHub.