[RESOLVIDO]
Galera, minha dúvida acho que é mais relacionada a lógica.
Eu estou fazendo um teste pra uma empresa e o enunciado da ques tão é o seguinte:
Given a CSV (Comma-separated values) file passed as a java.io.BufferedReader, returns an array of String
corresponding to values of the fields.
Fazer a leitura do arquivo eu fiz numa boa, segue meu método:
public static String[] lerArquivo(BufferedReader br){
String resultado[] = null;
try {
String s = br.readLine();
while(s != null){
resultado = s.split(";");
s = br.readLine();
}
} catch (Exception e) {
// TODO: handle exception
}
return resultado;
}
Só que com esse split percebi que ele substitui o que ja foi armazenado no array resultado.
Ou seja se eu tiver mais que uma linha no arquivo csv, meu retorno será sempre a última linha.
Gostaria de saber como poderia fazer pra retornar tudo?
Desde já agradeço imensamente a ajuda de vocês.
Abrs!
[RESOLVIDO]
É que é exatamente esta a função do split. O que está ocorrendo é que você está tentando montar o array linha a linha e isso não é o mais adequado, justamente pela sobreposição que será obtida. Primeiramente, você deve ler todo o arquivo, para, então, criar o array.
Mas e depois que eu ler, como eu faço para o BufferedReader voltar para o começo do arquivo?
O método BufferedReader.reset() resolve?
Obrigado pela dica!
E precisa que o BufferedReader volte ao início por quê?
Se o problema é apenas seguir o enunciado, basta ler o BufferedReader
public static String[] lerArquivo(BufferedReader br){
String resultado[] = null;
StringBuffer linhas = new StringBuffer();
try {
String s = br.readLine();
while(s != null){
linhas.append(s);
}
resultado = linhas.toString().split(";");
} catch (Exception e) {
System.out.println("Erro> " + e.getMessage());
}
return resultado;
}
Após ler, basta invocar o split. Eu optei por um StringBuffer, você pode usar StringBuilder ou mesmo apenas String e ir concatenando com “+”.
Mas a idéia é primeiro ler, depois, proceder com a divisão.
Só faltou pegar a próxima linha dentro do while. Se s não for inicialmente nula, vai ficar dando append na mesma String 
Outra sugestão é fechar o Reader quando o processamento estiver finalizado, de preferência em um bloco finally
[quote=digaoneves]Só faltou pegar a próxima linha dentro do while. Se s não for inicialmente nula, vai ficar dando append na mesma String 
Outra sugestão é fechar o Reader quando o processamento estiver finalizado, de preferência em um bloco finally[/quote]
De fato, esqueci disto.
Nossa pessoa, muito obrigado!!!
Deu certo.
Só que com um porém… 
Tipo, quando eu chego na última coluna do meu csv acho que num tem a separação com ponto e virgula,
aí que que acontece ele tipo junta a ultima coluna com a linha debaixo.
Será que dá pra resolver isso?
Mas muito obrigado pela ajuda drsmachado!
Camarada, com certeza dá.
Talvez
linhas.append(s);
linhas.append(";");
resolva.
Nossa cara, vc é o mestre!!!
haha!!!
Resolvido!!!
Muitissimo obrigado! de verdade!!!
[quote=amaurinorato]Nossa cara, vc é o mestre!!!
haha!!!
Resolvido!!!
Muitissimo obrigado! de verdade!!![/quote]
Que nada.
Méritos ao digaoneves, que me corrigiu. Eu havia ignorado por completo aquela possibilidade do loop infinito.
Aliás, aqui eu aprendo mais que compartilho.