Pesquisa em txt

4 respostas
G

Tenho que fazer um cadastro de alunos usando uma hashset que salva em txt e pesquisar pela matricula do aluno depois. consigo listar todos e adicionar

meu programa esta assim

uma classe aluno com seu construtor, gets e sets

a classe adiciona eu declaro o hashset

HashSet alunos = new HashSet();

peço os dados e faço o tratamento para gravar em arquivo

Aluno al = new Aluno(matricula, nomeAluno, dataNasc, endereco, email);
alunos.add(al);

FileWriter arq = new FileWriter("aluno.txt",true);
 PrintWriter gravarArq = new PrintWriter(arq);
gravarArq.printf("\n Matricula %d \n Nome %s \n Data %s \n Endereco %s \n Email %s",matricula,nomeAluno,dataNasc, endereco, email);
arq.close();

ate aqui funciona bem, o que não sei é como fazer para pesquisar. por exemplo quando achar, ele imprime o que?

esta assim a parte da busca

boolean achou = false;
    int matp;
    System.out.print("\nDigite a matricula para busca \n");
    matp = Integer.parseInt(ler.nextLine());
    try {
	      FileReader arq = new FileReader("aluno.txt");
	      BufferedReader lerArq = new BufferedReader(arq);
			String linha="";
 			while ((linha = lerArq.readLine()) != null) {
            if (linha.equals(matp)) {
                System.out.printf("%s\n",linha);
                achou = true;
            }
        }

aqui ele imprime tudo, foi o que eu usei para fazer a listagem de todos., mas queria que ele imprimesse só 1 aluno

exemplo

matricula 1
nome joao

matricula 2
nome pedro

quando digitar a matricula 2, imprima

matricula 2
nome pedro

4 Respostas

Fexx

Porque não usa um arquivo .proprieties? acredito que fique mais facil com ele.
ele guarda os registros em chave e valor, como um map, ou seja:

matricula1= fulano
matricula2= carlos
.
.

Onde matriuculaxx é a chave e o valor seria o nome.
Mas existe casos e casos, se está fazendo em .txt deve ter algo nisso.

G

acho que ainda nao aprendi isso

num txt cada aluno fica em um vetor ou outra coisa? pq acho que fica em algo numa posição, ou não?

Fexx

Um exemplo de arquivo .properties:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package testes;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;

/**
 *
 * @author Fernando
 */
public class ArquivoProp {

    public static void main(String[] args) {
        ArquivoProp arquivoProp = new ArquivoProp();
        try {
            arquivoProp.lerArquivo("src/alunos.properties", "2");
        } catch (FileNotFoundException ex) {
            System.out.println("Erro: "+ex.getMessage());
        }
    }
    
    public void lerArquivo(String arquivo, String matricula) throws FileNotFoundException {
        /*Leitura do arquivo properties*/
        FileInputStream fis = new FileInputStream(arquivo);
        Properties props = new Properties();
        try {
            props.load(fis);
//            Pega apenas o aluno da matricula especifica
            System.out.println("Aluno pesquisado referente a matricula "+matricula+": "+ props.getProperty(matricula)+"\n");
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

//        Pega todos os arquivos proprieties
        System.out.println("Todos os alunos");
        for (Enumeration elms = props.propertyNames(); elms.hasMoreElements();) {
            String prop = (String) elms.nextElement();
            System.out.println(prop + ": " + props.getProperty(prop));
            System.out.println(elms.hasMoreElements() ? "\n" : "");
        }
        
        
        
        
    }
}

Vc terá que criar um arquivo com a extensao .properties, no exemplo eu criei um chamado: alunos.properties dentro de src, dentro do arquivo está o conteúdo:

1=fulano
2=Carlos
3=Roberto
G

teria algum outro jeito?

tenho que fazer pelo metodo de txt mesmo

Criado 20 de abril de 2013
Ultima resposta 20 de abr. de 2013
Respostas 4
Participantes 2