[RESOLVIDO] Dúvida ao Ler, imprimir e pesquisar em arquivo txt

2 respostas
dileivas

Oi gente!

Estou fazendo um projeto no qual criei um arquivo “cadastro.txt” para usar de banco de dados.
Quando alguém se cadastra, no meu txt fica assim:

| | |Digite seu nome e sobrenome...|Digite a partida...|Digite o destino...|ex 00h00|ex. (XX) XXXX-XXXX|ex. [email removido]| | | |Digite seu nome e sobrenome...|Digite a partida...|Digite o destino...|ex 00h00|ex. (XX) XXXX-XXXX|ex. [email removido]| | | |Digite seu nome e sobrenome...|Digite a partida...|Digite o destino...|ex 00h00|ex. (XX) XXXX-XXXX|ex. [email removido]| | |

Usei “|” para separar as informações e deixei esse “| |” entre linhas para pular linha quando fosse recuperar/imprimir meus dados.

Agora, preciso recuperar essas informações e imprimi-las, porém não posso usar System.out.print pois estou usando Interface Gráfica, logo estou tentando criar um método em outra classe e importá-lo para minha interface, o qual retorne uma “String texto” com todas as informações do meu arquivo txt bonitinhas… Esse retorno já está indo direto para uma jTextArea…

Enfim, fiz um método mas está com algum erro que não consigo enxergar. Quando clico no botão da minha interface para mostrar todos os dados cadastrados, ele fica com um looping infinito… Segue meu método abaixo:

public String LerCadastro(){ String linha, texto = ""; String arquivo = "cadastro.txt"; try{ BufferedReader ler = new BufferedReader(new FileReader(arquivo)); linha = ler.readLine(); StringTokenizer st = new StringTokenizer(linha,"|"); String[] arr = new String[st.countTokens()]; int i = 0; while(linha != null){ while(st.hasMoreTokens()){ arr[i] = st.nextToken(); texto = texto + arr[i] + "\n"; i++; } } } catch(Exception error){ System.out.print("ERRO DURANTE A MANIPULAÇÃO DO ARQUIVO " +arquivo); } return texto; }

Enfim, também fiz desse jeito (separando dados por “| |”) pensando que seria mais fácil desenvolver uma pesquisa no meu banco de dados. Seria uma pesquisa na qual o usuário digita Nome e/ou Cidade de Partida e/ou Cidade de Destino e como retorno tem a linha do banco de dados. Se alguém puder me dar uma luz de como começar essa pesquisa, ficaria muito grato! Não sei se devo usar vetores (ou como usá-los para pesquisa), ou se é apenas comparação de Strings linha por linha…

Espero que possam me ajudar… =)

Abrass!

2 Respostas

Ironlynx

dileivas, bem-vindo ao GUJ!

while(linha != null){   
  while(st.hasMoreTokens())
texto = texto + arr[i] + "\n";

Trava aí…Esse ‘texto’ é o que vc passa para o append?
Rapaz, esquece esse negócio de StringTokenizer!!!Isso é java 1.3
Use a classe SCanner para ler do arquivo com o método split, algo + ou - assim:

Scanner scanner = new Scanner("cadastro.txt");  
while (scanner.hasNextLine()) {  
    String[] campos = scanner.nextLine().split("|"); 
...

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

Se bem que com esse “| |” entre linhas vc terá um trabalho de verificar elas primeiro.Se tiver uns caracteres de
escape perdido por aí leia como usar a classe Formatter (http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html)

dileivas

Olá Ironlyns! Muuuito obrigado pela resposta! Mas não me dei muito bem com ela não, sempre me retornava erros em relação à leitura do arquivo… Acabei criando outro método sem usar o Scanner, pois achei que o problema era ele… hahahahaha
Segue aí meu código:

Para um arquivo “cadastro.txt” com linhas assim:

Nome: Digite seu nome e sobrenome...|Cidade de Partida: Digite a partida...|Cidade de Destino: Digite o destino...|Horário de Partida: ex 00h00|Telefone: ex. (XX) XXXX-XXXX|E-mail: ex. [email removido]|

O método para imprimir os dados (chamando-o posteriormente num main, no meu caso um jTextArea) ficou assim:

public String LerCadastro(){ String saida = ""; try{ BufferedReader buff = new BufferedReader(new FileReader("cadastro.txt")); List<String> testeAL = new ArrayList<String>(); String texto = ""; while(buff.ready()){ texto = texto + buff.readLine() + "\n"; } buff.close(); testeAL = Arrays.asList(texto.split("\\|")); for(int i=0; i<testeAL.size(); i++){ saida = saida + testeAL.get(i)+"\n"; } } catch(Exception error){ System.out.print("ERRO DURANTE A MANIPULAÇÃO DO ARQUIVO"); } return saida; }

Deve dar pra reduzir bastante isso aí, principalmente se conseguir usar o jeito que você disse anteriormente, mas como não estava conseguindo e tenho prazo pra entregar esse projeto, arranjei essa maneira (que me deu MUITO trabalho, pois não conhecia nem metade dos comandos que utilizei lol).
Primeiro leio o arquivo txt com o BufferedReader, jogo tudo dentro de uma String texto (mas ainda com meus splits “|”), daí pego essa String e jogo num ArrayList, o qual (eu acho) transformo num tipo de lista com o Arrays.asList() utilizando meus splits e depois leio essa lista (ou vetor) com o for, concatenando tudo pra uma String saida.

A saída ficou do jeito que eu queria:

Nome: Digite seu nome e sobrenome... Cidade de Partida: Digite a partida... Cidade de Destino: Digite o destino... Horário de Partida: ex 00h00 Telefone: ex. (XX) XXXX-XXXX E-mail: ex. [email removido]

Agora só falta elaborar uma pesquisa pro meu banco de dados… se puder dar alguma sugestão, eu agradeceria MUITO! =)

Criado 21 de abril de 2012
Ultima resposta 22 de abr. de 2012
Respostas 2
Participantes 2