O ID é sempre numérico, ou tem algum caracter não-numérico? Só para saber.
Esse é o caso clássico de uso do java.util.Scanner, que ouvi falar que é muito usada em tutoriais e cursos. (Eu, em particular, não gosto muito de usá-la, mas é questão de gosto pessoal.)
Não testei o código abaixo, mas tipicamente você teria algo como:
Scanner sc = new Scanner (new File ("arquivo.txt"));
while (sc.hasNext()) {
String id = sc.next();
double valor = sc.nextDouble();
// Faça alguma coisa com "id" e "valor".
}
Entao, nunca li nao arquivos no java. Estou no meio da apostila fj11. No google ja procurei muuuito, porem, achei muita coisa ajudando quem realmente jah sabe.
bom o que puderem ajudar ja ajuda bastante. Vou ver o que o amigo acima orientou.
[quote=entanglement]O ID é sempre numérico, ou tem algum caracter não-numérico? Só para saber.
Esse é o caso clássico de uso do java.util.Scanner, que ouvi falar que é muito usada em tutoriais e cursos. (Eu, em particular, não gosto muito de usá-la, mas é questão de gosto pessoal.)
Não testei o código abaixo, mas tipicamente você teria algo como:
Scanner sc = new Scanner (new File ("arquivo.txt"));
while (sc.hasNext()) {
String id = sc.next();
double valor = sc.nextDouble();
// Faça alguma coisa com "id" e "valor".
}
[/quote]
CSVs são cheios de casos particulares, nesse caso eu uso um java.io.StreamTokenizer (por exemplo, digamos que você tem um CSV separado por vírgulas, com campos string, cercado por aspas, e que tem uma vírgula no meio. StreamTokenizer toma conta desses casos, mas Scanner não consegue pegar esse caso.
vou tentar colocar o codigo que eu tenho ateh agora.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class Despesa {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.printf("Informe o nome de arquivo texto:\n");
String nome = ler.nextLine();
System.out.printf("\nConteúdo do arquivo texto:\n");
try {
FileReader arq = new FileReader(nome);
BufferedReader lerArq = new BufferedReader(arq);
String linha = lerArq.readLine(); // lê a primeira linha
// a variável "linha" recebe o valor "null" quando o processo
// de repetição atingir o final do arquivo texto
while (linha != null) {
System.out.printf("%s\n", linha);
linha = lerArq.readLine(); // lê da segunda até a última linha
}
arq.close();
} catch (IOException e) {
System.err.printf("Erro na abertura do arquivo: %s.\n",
e.getMessage());
}
System.out.println();
}
}
consigo ler numa boa, porem, nao cosigo ler com o “split” do 50010001 453.54 . ele soh le o 50010001.
Felipeaps mto obrigado pela ajuda. Eu pensei que ia dar certo. Mas ele dah um erro aqui “Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 1
at Despesa.main(Despesa.java:23)”.
segue meu codigo:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class Despesa {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.printf("Informe o nome de arquivo texto:\n");
String nome = ler.nextLine();
System.out.printf("\nConteúdo do arquivo texto:\n");
try {
FileReader arq = new FileReader(nome);
BufferedReader lerArq = new BufferedReader(arq);
String linha;
String[] split;
while ((linha = lerArq.readLine()) != null) {
split = linha.split(" ");
System.out.println(split[0]);
System.out.println(split[1]);
}
lerArq.close();
} catch (IOException e) {
System.out.println(e);
}
}
}
Se está dando essa excessão, significa que seu array de String, o String[] split;, só possui 1 posição, ou seja, quando tenta-se executar o System.out.println(split[1]);, que seria pegar a segunda posição do array, não é possível.
Provavelmente seu arquivo não é inteiro do jeito que vc informou. É necessário fazer verificações. Este código que enviei foi só pra exemplificar.