[Resolvido] Problema com leitura de arquivo CSV

Pessoal, recentemente tive a necessidade de importar arquivos csv para minha aplicação, pesquisando na net encontrei um pequeno tutorial onde se criava um vetor para poder navegar pelas celulas e manipular os dados, ate ai tudo bem, o problema é que não consigo navegar por todas as celulas, e as vezes não consigo navegar por nenhuma, abaixo o código que estou usando:

public static void main(String args[]){ String filename="C:/modelo.csv"; File file=new File(filename); try{ Scanner inputStream=new Scanner(file); while(inputStream.hasNext()){ String data=inputStream.next(); String values[]=data.split(","); System.out.println(values[2]); } inputStream.close(); } catch(Exception e){ e.printStackTrace(); } }

Tente assim

String values[]=data.split("\\,"); 

Mesma coisa:

java.lang.ArrayIndexOutOfBoundsException: 3 at model.ImportarCSV.main(ImportarCSV.java:25)

[quote=Luciano_Lopes]Pessoal, recentemente tive a necessidade de importar arquivos csv para minha aplicação, pesquisando na net encontrei um pequeno tutorial onde se criava um vetor para poder navegar pelas celulas e manipular os dados, ate ai tudo bem, o problema é que não consigo navegar por todas as celulas, e as vezes não consigo navegar por nenhuma, abaixo o código que estou usando:

public static void main(String args[]){ String filename="C:/modelo.csv"; File file=new File(filename); try{ Scanner inputStream=new Scanner(file); while(inputStream.hasNext()){ String data=inputStream.next(); String values[]=data.split(","); System.out.println(values[2]); } inputStream.close(); } catch(Exception e){ e.printStackTrace(); } }
[/quote]

Luciano_Lopes ao invés de você usar o seguinte trecho.

Scanner inputStream=new Scanner(file);
   while(inputStream.hasNext()){
      String data=inputStream.next(); /* <| o problema pode estar aki!  O correto não seria você recuperar toda a sua Linha do arquivo CSV?*/
      String values[]=data.split(",");
      System.out.println(values[2]);
        }

Tente assim

Scanner inputStream=new Scanner(file);
   while(inputStream.hasNext()){
      String data=inputStream.nextLine(); /* <| Dessa forma você recuperar todo a sua linha.*/
      String values[]=data.split(",");
      System.out.println(values[2]);
        }

Galera muito obrigado, resolvi o problema usando a resposta dos dois, o trecho ficou assim:

String data=inputStream.nextLine();//pega a linha String values[]=data.split("\\;"); //intervalo das celulas

Tópico resolvido! Edite o primeiro post e adicione [Resolvido]. xD

Ah sim, uma duvida rapida, no caso de criar um arquivo e jogar os valores, como faz?

Depende de como está vindo seus dados se tiver em uma Lista, faça um for e escreva usando PrintWrite.

 File seuCSV = new File("/home/linux/arquivo.csv");
PrintWriter printWriter = new PrintWriter(new BufferedWriter(new FileWriter(seuCSV), (2*1024*1024)));
for(Object item : suaLista){
   printWriter.print(item);
}
printWriter.flush(); printWriter.close();

Eu quero pegar os dados do banco (mysql),gerar o csv e fazer o download no browser

Já que você quer buscar informações do banco pra gerar um *.csv faz isso que eu te falei,
Faça um método que lhe retorno todos os resultados do banco que você deseja, faça um for
e vai escrevendo no arquivo…

Esse File seuCSV = new File("/home/linux/arquivo.csv"); vai criar o meu arquivo no servidor?

Você vai passar o diretório do seu arquivo.
Depois você faz um verificação se o mesmo existe ou não. Caso não exista crie ele.

if(!seuCSV.exists()){
   seuCSV.createNewFile();
}

Ah, tranquilo, nunca pensei que ia ser tão simples manipulação com o java :smiley: