pra começar não coloque “please” ou “ajude” ou qualquer coisa assim nos títulos dos tópicos, mantenha ele o mais objetivo possível.
Agora vamos ao problema.
A boa notícia é que parece ser uma leitura muito simples, o que você sabe de java? já manipulou arquivos? já manipulou Strings?
Hebert_Coelho
Você pode pesquisar o seguinte no google:
ler arquivos java
[=
E
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:
Scannersc=newScanner(newFile("arquivo.txt"));while(sc.hasNext()){Stringid=sc.next();doublevalor=sc.nextDouble();// Faça alguma coisa com "id" e "valor". }
M
Marcellusf
WOW como foi rapido.
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.
Valeu mesmo vcs todos, rapidez da poxa
Abraços
Rodrigo_Sasaki
Só por curiosidade pessoal mesmo, o que você preferiria usar? E talvez o motivo hehehe
E
entanglement
Bom, pra começar normalmente o tipo de arquivos -texto que preciso ler é XML ou CSV, e para esses casos eu não preciso usar Scanner.
M
Marcellusf
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".
}
o id vai ser sempre numerico.
Phelps
Nossa, nem sabia que a classe scanner lia arquivos externos, achava que no maximo escrevia. Mas agora lembrei que ela é subclasse do java.io, certo?
Rodrigo_Sasaki
Mas a classe Scanner não escreve nada, ela só lê, por isso o nome.
E ela faz parte do pacote java.util
jeffev
Um exemplo bom simples de como ler um arquivo, talvez lhe ajude.
No caso de XMLs eu entendo, fica bem trabalhoso ler com Scanner, mas e CSVs? prefere usar um BufferedReader?
E
entanglement
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.
M
Marcellusf
vou tentar colocar o codigo que eu tenho ateh agora.
importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;importjava.util.Scanner;publicclassDespesa{publicstaticvoidmain(String[]args){Scannerler=newScanner(System.in);System.out.printf("Informe o nome de arquivo texto:\n");Stringnome=ler.nextLine();System.out.printf("\nConteúdo do arquivo texto:\n");try{FileReaderarq=newFileReader(nome);BufferedReaderlerArq=newBufferedReader(arq);Stringlinha=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 textowhile(linha!=null){System.out.printf("%s\n",linha);linha=lerArq.readLine();// lê da segunda até a última linha}arq.close();}catch(IOExceptione){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:
importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;importjava.util.Scanner;publicclassDespesa{publicstaticvoidmain(String[]args){Scannerler=newScanner(System.in);System.out.printf("Informe o nome de arquivo texto:\n");Stringnome=ler.nextLine();System.out.printf("\nConteúdo do arquivo texto:\n");try{FileReaderarq=newFileReader(nome);BufferedReaderlerArq=newBufferedReader(arq);Stringlinha;String[]split;while((linha=lerArq.readLine())!=null){split=linha.split(" ");System.out.println(split[0]);System.out.println(split[1]);}lerArq.close();}catch(IOExceptione){System.out.println(e);}}}
F
felipeaps
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.
M
Marcellusf
blz felipe, vou ver aqui o que eu faço. obrigado pela ajuda.