Pesquisar Cadastro em TXT

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!";
}

}

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("zequinha@email.com");
        pesquisarContatosPorEmail("fulano@email.com");

        pesquisarContatosPorTelefone("89 0123-4567");
        pesquisarContatosPorTelefone("01 2345-6789");
    }

    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("fulano@email.com");
        contato.setTelefone("12 3456-7890");
        System.out.println(contato.cadastrar());

        contato = new Contato();
        contato.setNome("Ciclano");
        contato.setEmail("ciclano@email.com");
        contato.setTelefone("01 2345-6789");
        System.out.println(contato.cadastrar());

        contato = new Contato();
        contato.setNome("Beltrano");
        contato.setEmail("beltrano@email.com");
        contato.setTelefone("90 1234-5678");
        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:     fulano@email.com
    Telefone:  12 3456-7890

    Nome:      Ciclano
    Email:     ciclano@email.com
    Telefone:  01 2345-6789

    Nome:      Beltrano
    Email:     beltrano@email.com
    Telefone:  90 1234-5678

Pesquisando pelo nome "Zequinha"...
Lista de Contatos:
    Vazia
Pesquisando pelo nome "Beltrano"...
Lista de Contatos:
    Nome:      Beltrano
    Email:     beltrano@email.com
    Telefone:  90 1234-5678

Pesquisando pelo email "zequinha@email.com"...
Lista de Contatos:
    Vazia
Pesquisando pelo email "fulano@email.com"...
Lista de Contatos:
    Nome:      Fulano
    Email:     fulano@email.com
    Telefone:  12 3456-7890

Pesquisando pelo telefone "89 0123-4567"...
Lista de Contatos:
    Vazia
Pesquisando pelo telefone "01 2345-6789"...
Lista de Contatos:
    Nome:      Ciclano
    Email:     ciclano@email.com
    Telefone:  01 2345-6789

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

Nome: Fulano
Email: fulano@email.com
Telefone: 12 3456-7890
Nome: Ciclano
Email: ciclano@email.com
Telefone: 01 2345-6789
Nome: Beltrano
Email: beltrano@email.com
Telefone: 90 1234-5678