Pesquisar Cadastro em TXT

1 resposta
C

Boa tarde
tava fazendo um trabalho onde eu tinha que fazer um crud que salva as informações do cadastro de um Usuário em arquivo txt, além disso o programa deveria ter a opção de poder buscar um contato pelo nome ou telefone dele caso necessário, como eu faço para o usuario poder fazer essa pesquisa no txt ?

codigo da classe de contatos:
package trabalho;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

public class Contatos {

private String nome;
private String email;
private String telefone;

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String Cadastrar(){

    try {
        FileWriter fw = new FileWriter ("C:" + File.separatorChar + "" + File.separatorChar + "" + File.separatorChar + "", true);
        PrintWriter pw = new PrintWriter(fw);
        
       
        pw.println("Nome: "+ this.nome);
        pw.println("Email: "+ this.email);
        pw.println("Telefone: "+ this.telefone);
        pw.flush();
        pw.close();
        fw.close();
        
        
    } catch (IOException ex) {
        System.out.printf("Erro Ao Cadastrar Contato:\n");
    }

return  "Cadastro Efetuado Com Sucesso!";
}

}

1 Resposta

staroski

Sua classe deveria se chamar Contato, no singular, pois cada instância dela representa um contato e não vários. :wink:

Não é possível criar um arquivo chamado C:\\\.
Sugiro criar uma constante para o arquivo que você vai manipular, afinal todos os objetos vão ser gravados e lidos do mesmo arquivo:

private static final File ARQUIVO = new File("C:", "contatos.txt");

Siga as boas práticas do Java, renomeie seu método Cadastrar para cadastrar, em minúsculo.

Eu faria sua classe Contato dessa forma:

package trabalho;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class Contato {

    public static final File ARQUIVO = new File("C:", "contatos.txt");

    private static final String CAMPO_NOME = "Nome";
    private static final String CAMPO_EMAIL = "Email";
    private static final String CAMPO_TELEFONE = "Telefone";

    public static List<Contato> listar() {
        List<Contato> contatos = new ArrayList<Contato>();
        if (ARQUIVO.exists()) {
            try {
                BufferedReader reader = new BufferedReader(new FileReader(ARQUIVO));
                String linha = null;
                do {
                    Contato contato = new Contato();
                    boolean setouAlgumCampo = false;
                    linha = reader.readLine();
                    setouAlgumCampo |= setarCampo(contato, linha);

                    linha = reader.readLine();
                    setouAlgumCampo |= setarCampo(contato, linha);

                    linha = reader.readLine();
                    setouAlgumCampo |= setarCampo(contato, linha);

                    if (setouAlgumCampo) {
                        contatos.add(contato);
                    }
                } while (linha != null);

                reader.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return contatos;
    }

    public static List<Contato> pesquisar(Predicate<Contato> condicaoDeBusca) {
        List<Contato> todos = listar();
        List<Contato> encontrados = new ArrayList<Contato>();
        for (Contato contato : todos) {
            if (condicaoDeBusca.test(contato)) {
                encontrados.add(contato);
            }
        }
        return encontrados;
    }

    private static boolean setarCampo(Contato contato, String linha) {
        if (linha != null && !(linha = linha.trim()).isEmpty()) {
            String[] textoSeparado = linha.split(":");
            String campo = textoSeparado[0];
            String valor = textoSeparado[1];
            if (campo.equals(CAMPO_NOME)) {
                contato.setNome(valor);
                return true;
            }
            if (campo.equals(CAMPO_EMAIL)) {
                contato.setEmail(valor);
                return true;
            }
            if (campo.equals(CAMPO_TELEFONE)) {
                contato.setTelefone(valor);
                return true;
            }
        }
        return false;
    }
    private String nome;
    private String email;
    private String telefone;

    public Contato() {}

    public String cadastrar() {
        try {
            PrintWriter writer = new PrintWriter(new FileWriter(ARQUIVO, true));

            writer.println(CAMPO_NOME + ": " + nome);
            writer.println(CAMPO_EMAIL + ": " + email);
            writer.println(CAMPO_TELEFONE + ": " + telefone);

            writer.flush();
            writer.close();
        } catch (IOException ex) {
            ex.printStackTrace();
            return "Erro ao Cadastrar Contato:";
        }
        return "Cadastro Efetuado Com Sucesso!";
    }

    public String getEmail() {
        return email;
    }

    public String getNome() {
        return nome;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
}

Abaixo tem um programinha de exemplo, utilizando a classe Contato:

package trabalho;

import java.util.List;

public class Exemplo {

    public static void main(String[] args) {
        Exemplo programa = new Exemplo();
        programa.executar();
    }

    public void executar() {
        List<Contato> cadastrados = Contato.listar();
        listarContatos(cadastrados);

        cadastrarAlgunsContatos();

        cadastrados = Contato.listar();
        listarContatos(cadastrados);

        pesquisarContatosPorNome("Zequinha");
        pesquisarContatosPorNome("Beltrano");

        pesquisarContatosPorEmail("[email removido]");
        pesquisarContatosPorEmail("[email removido]");

        pesquisarContatosPorTelefone("[telefone removido]");
        pesquisarContatosPorTelefone("[telefone removido]");
    }

    private void listarContatos(List<Contato> contatos) {
        System.out.println("Lista de Contatos:");
        if (contatos.isEmpty()) {
            System.out.println("    Vazia");
        } else {
            for (Contato contato : contatos) {
                System.out.println("    Nome:     " + contato.getNome());
                System.out.println("    Email:    " + contato.getEmail());
                System.out.println("    Telefone: " + contato.getTelefone());
                System.out.println();
            }
        }

    }

    private void cadastrarAlgunsContatos() {
        Contato contato = new Contato();
        contato.setNome("Fulano");
        contato.setEmail("[email removido]");
        contato.setTelefone("[telefone removido]");
        System.out.println(contato.cadastrar());

        contato = new Contato();
        contato.setNome("Ciclano");
        contato.setEmail("[email removido]");
        contato.setTelefone("[telefone removido]");
        System.out.println(contato.cadastrar());

        contato = new Contato();
        contato.setNome("Beltrano");
        contato.setEmail("[email removido]");
        contato.setTelefone("[telefone removido]");
        System.out.println(contato.cadastrar());
    }

    private void pesquisarContatosPorNome(String nome) {
        System.out.println("Pesquisando pelo nome \"" + nome + "\"...");
        List<Contato> encontrados = Contato.pesquisar(contato -> contato.getNome().contains(nome));
        listarContatos(encontrados);
    }

    private void pesquisarContatosPorEmail(String email) {
        System.out.println("Pesquisando pelo email \"" + email + "\"...");
        List<Contato> encontrados = Contato.pesquisar(contato -> contato.getEmail().contains(email));
        listarContatos(encontrados);
    }

    private void pesquisarContatosPorTelefone(String telefone) {
        System.out.println("Pesquisando pelo telefone \"" + telefone + "\"...");
        List<Contato> encontrados = Contato.pesquisar(contato -> contato.getTelefone().contains(telefone));
        listarContatos(encontrados);
    }
}

Abaixo está a saída do programa:

Lista de Contatos:
    Vazia
Cadastro Efetuado Com Sucesso!
Cadastro Efetuado Com Sucesso!
Cadastro Efetuado Com Sucesso!
Lista de Contatos:
    Nome:      Fulano
    Email:     [email removido]
    Telefone:  [telefone removido]

    Nome:      Ciclano
    Email:     [email removido]
    Telefone:  [telefone removido]

    Nome:      Beltrano
    Email:     [email removido]
    Telefone:  [telefone removido]

Pesquisando pelo nome "Zequinha"...
Lista de Contatos:
    Vazia
Pesquisando pelo nome "Beltrano"...
Lista de Contatos:
    Nome:      Beltrano
    Email:     [email removido]
    Telefone:  [telefone removido]

Pesquisando pelo email "[email removido]"...
Lista de Contatos:
    Vazia
Pesquisando pelo email "[email removido]"...
Lista de Contatos:
    Nome:      Fulano
    Email:     [email removido]
    Telefone:  [telefone removido]

Pesquisando pelo telefone "[telefone removido]"...
Lista de Contatos:
    Vazia
Pesquisando pelo telefone "[telefone removido]"...
Lista de Contatos:
    Nome:      Ciclano
    Email:     [email removido]
    Telefone:  [telefone removido]

E abaixo está o conteúdo do arquivo C:\contatos.txt:

Nome: Fulano
Email: [email removido]
Telefone: [telefone removido]
Nome: Ciclano
Email: [email removido]
Telefone: [telefone removido]
Nome: Beltrano
Email: [email removido]
Telefone: [telefone removido]
Criado 9 de julho de 2020
Ultima resposta 15 de jul. de 2020
Respostas 1
Participantes 2