Ler um arquivo csv

Boa tarde pessoal,
Estou aprendendo java e fazendo um código simples para ler um arquivo CSV.

Ele tem dado o erro java.lang.ArrayIndexOutOfBoundsException, eu entendi que o erro acontece por causa do array String[] cli, mas o meu problema está sendo desenvolver uma solução para esse erro.

	FileInputStream file = new FileInputStream("C:\\pessoa.csv");
	Properties p = new Properties();
	p.load(file);
	String pessoa = p.toString();
	String[] clientes = pessoa.split(",");

	for (int i = 0; i < clientes.length; i++) {
	    String[] cli = clientes[i].split("[|]");
	    System.out.println(cli[i]);
	}

Qual seria a melhor solução para receber o array clientes[]?? O meu código, além do problema, pode ser melhorado em mais alguma coisa??

Andre,

A classe Properties funciona um pouco diferente do que você provavelmente entendeu. Uma propriedade (ou property) é um par chave/valor. Um .csv não é um arquivo de properties, mas algo como uma sequência de valores, onde cada linha representa um “objeto”, e os atributos desse objeto são separados por vírgula.

Se você tem, por exemplo um arquivo pessoa.csv assim:

andre,brasil,guj
lucas,africa do sul,guj

Você pode interpretá-lo assim:

import java.io.*;
import java.util.Arrays;

class Main {

    private static final String VIRGULA = ",";

    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("pessoa.csv")));
        String linha = null;
        while ((linha = reader.readLine()) != null) {
            String[] dadosUsuario = linha.split(VIRGULA);
            System.out.println(Arrays.toString(dadosUsuario));
            System.out.println("Nome: " + dadosUsuario[0]);
            System.out.println("País: " + dadosUsuario[1]);
            System.out.println("Fórum: " + dadosUsuario[2]);
            System.out.println("--------------------------");
        }
        reader.close();
    }
}
1 curtida

Muito obrigado pela ajuda.
No meu arquivo cada linha está separada por vírgula e cada coluna separada por pipe.

143| DISTRIBUIDORA DE ALIMENTOS LTDA|10854725000855,
260|R CIA LTDA|11312889000169,

Então para instanciar o objeto e salvar nas minhas colunas id, nome e cpfcnpj do banco de dados, eu preciso fazer o split dos dois??

Então não é um CSV. Mas indiferente, da para parsear.

Existem quebras de linha no arquivo? Se sim, você pode usar a mesma técnica, só vai precisar tirar a vírgula no final de cada linha e dar split usando | ao invés da vírgula.

Valeu demais pela ajuda amigo…
Muito obrigado mesmo.

Ajudou muito aqui amigo. Obrigado!