Pesquisa em TXT Com Java

Boa noite,
estou fazendo um projeto em que crio um arquivo acessos.txt para armazenar os seguintes dados:

Nome:
Marca DVR: Selecionar
Modelo:
Aplicativo: Selecionar
Porta Web:
Porta Serviço :
Porta RSTP:
Usuario:
Senha:
IP: . . .
Acesso Prioritario: Não Selecionado
OBS:

Fiz todo o método de criação do arquivo com o código abaixo

private String nome;
private String Modelo;
private String Ip;
private String PortaWEB;
private String PortaServico;
private String PortaRSTP;
private String Usuario;
private String Senha;
private String OBS;
private String DataInst;
private String MarcaDVR;
private String App;


public String getMarcaDVR() {
    return MarcaDVR;
}

public void setMarcaDVR(String MarcaDVR) {
    this.MarcaDVR = MarcaDVR;
}

public String getApp() {
    return App;
}

public void setApp(String App) {
    this.App = App;
}

public String getAcessoPrioritario() {
    return AcessoPrioritario;
}

public void setAcessoPrioritario(String AcessoPrioritario) {
    this.AcessoPrioritario = AcessoPrioritario;
}
private String AcessoPrioritario;


public String getDataInst() {
    return DataInst;
}

public void setDataInst(String DataInst) {
    this.DataInst = DataInst;
}

public String getOBS() {
    return OBS;
}

public void setOBS(String OBS) {
    this.OBS = OBS;
}

public Cadastro() {
    
}

public String getNome() {
    return nome;
}

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

public String getModelo() {
    return Modelo;
}

public void setModelo(String Modelo) {
    this.Modelo = Modelo;
}

public String getIp() {
    return Ip;
}

public void setIp(String Ip) {
    this.Ip = Ip;
}

public String getPortaWEB() {
    return PortaWEB;
}

public void setPortaWEB(String PortaWEB) {
    this.PortaWEB = PortaWEB;
}

public String getPortaServico() {
    return PortaServico;
}

public void setPortaServico(String PortaServico) {
    this.PortaServico = PortaServico;
}

public String getPortaRSTP() {
    return PortaRSTP;
}

public void setPortaRSTP(String PortaRSTP) {
    this.PortaRSTP = PortaRSTP;
}

public String getUsuario() {
    return Usuario;
}

public void setUsuario(String Usuario) {
    this.Usuario = Usuario;
}

public String getSenha() {
    return Senha;
}

public void setSenha(String Senha) {
    this.Senha = Senha;
}

public String Salvar(){
    

    try {
        FileWriter fw = new FileWriter("acessos.txt",true);
        PrintWriter pw = new PrintWriter(fw);
        pw.println("Nome: " +this.nome);
        pw.println("Marca DVR: "+this.MarcaDVR);
        pw.println("Modelo:  "+this.Modelo);
        pw.println("Aplicativo: "+this.App);
        pw.println("Porta Web: "+this.PortaWEB);
        pw.println("Porta Serviço :"+this.PortaServico);
        pw.println("Porta RSTP: "+this.PortaRSTP);
        pw.println("Usuario: "+this.Usuario);
        pw.println("Senha: "+this.Senha);
        pw.println("IP: "+this.Ip);
        pw.println("Acesso Prioritario: "+this.AcessoPrioritario);
        pw.println("OBS: "+this.OBS);
        pw.flush();
        pw.close();
        fw.close();
        
}catch (IOException ex) {
        Logger.getLogger(Cadastro.class.getName()).log(Level.SEVERE, null, ex);
    }
    return "Cadastrado Com Sucesso";
}

Tenho como gatilho para criar o arquivo um JPanel com os respectivos campos para preenchimento dos dados e a execução do salva está através de um Jbutton

aqui vai a minha duvida , preciso ler o arquivo txt ( já consigo fazer através do código abaixo), porem precisava pesquisar dentro desse txt e trazer os dados correspondentes ao nome que foi pesquisado e preencher um JtextField com os dados que foram encontrados. Não tenho muito experiencia em java

public String Ler(){

File arquivo = new File("acessos.txt");
    
try{
    FileReader ler = new FileReader(arquivo);
    BufferedReader lerb = new BufferedReader(ler);
    String linha = lerb.readLine();
        while (linha != null){
            System.out.println(linha);
            linha = lerb.readLine();
        }
    
}catch(IOException ex) {
     
}


return "Leitura com Sucesso";

}

Um forma de fazer isso é assim:

  1. Adicione algo que separe um dado de outro, no caso eu adicionei o “—” após o “OBS”: + this.nome;
public String Salvar() {


        try {
            FileWriter fw = new FileWriter("C:\\Users\\campeão\\IdeaProjects\\RandomCodes\\src\\foradocurso\\ajudas\\guilhermecastro\\acessos.txt", true);
            PrintWriter pw = new PrintWriter(fw);
            pw.println("Nome: " + this.nome);
            pw.println("Marca DVR: " + this.MarcaDVR);
            pw.println("Modelo:  " + this.Modelo);
            pw.println("Aplicativo: " + this.App);
            pw.println("Porta Web: " + this.PortaWEB);
            pw.println("Porta Serviço :" + this.PortaServico);
            pw.println("Porta RSTP: " + this.PortaRSTP);
            pw.println("Usuario: " + this.Usuario);
            pw.println("Senha: " + this.Senha);
            pw.println("IP: " + this.Ip);
            pw.println("Acesso Prioritario: " + this.AcessoPrioritario);
            pw.println("OBS: " + this.OBS);
            pw.println("---"); // Esse é o separador de dados.
            pw.flush();
            pw.close();
            fw.close();

        } catch (IOException ex) {
            Logger.getLogger(Cadastro.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "Cadastrado Com Sucesso";
    }

Quando você salvar os dados eles ficarão mais ou menos assim:
Nome:
Marca DVR:
Modelo:
Aplicativo:
Porta Web:
Porta Serviço:
Porta RSTP:
Usuario:
Senha:
IP:
Acesso Prioritario:
OBS:
---

  1. Crie um método para pegar todos os dados dentro do acessos.txt, algo mais ou menos assim:
// Apenas retornará todos os dados que estão dentro do acesso.txt em forma de String.
public String retornarTodosOsDados() {
        StringBuilder dados = new StringBuilder();
        File file = new File("acessos.txt");

        try (BufferedReader br = new BufferedReader(new FileReader(file))) {

            while (br.ready()) {
                dados.append(br.readLine()).append("\n");
            }

        } catch (IOException ex) {
            ex.printStackTrace();
        }

        return dados.toString();
    }
  1. Crie um método que receberá o nome que você está pesquisando. Se achar algo com o mesmo nome retorne todos os dados, senão retorne uma mensagem dizendo que não o encontrou.
public String retornarDadosPorNome(String nome) {
        String[] dados = retornarTodosOsDados().split("---"); // Separa os dados usando o separador.

        for (String dado : dados) {
            dado = dado.trim(); // Remove os espaços indesejados.
            // Pega a primeira linha do dado atual, no caso o "Nome: " e compara com o nome com o que foi passado.
            if (dado.split("\n")[0].equalsIgnoreCase("Nome: " + nome)) {
                return dado;
            }

        }

        return "Nenhum dado encontrado!";
    }

Essa foi uma forma que encontrei de resolver seu problema, provavelmente há um modo mais simples.