Pesquisar e Alterar String de um arquivo texto

Olá pessoal!

Eu fiz muita pesquisa na internet e inclusive aqui dentro do fórum mas não estou conseguindo fazer a alteração de um texto dentro um arquivo.txt gerado pelo java.

Eu gostaria de por exemplo, pesquisar o Nome: Fernanda e substituilo por outro Nome ou até mesmo apaga-lo.

Acompanhem o código:

 import java.util.Scanner;
import javax.swing.JOptionPane;
public class agendafatec2 {
	public static void main(String args[])
	{
	  String name = "",email = "",telefone = "";
	  Scanner input = new Scanner(System.in);
	  String resp = "0";
	  contatos cont = new contatos();
	  do{
	  System.out.printf(" :. Seja bem vindo a agenda 0.1 .:");
	  System.out.printf("\n* 1     Incluir Contato");
	  System.out.printf("\n* 2     Alterar Contato");
	  System.out.printf("\n* 3     Pesquisar Contato");
	  System.out.printf("\n* 4     Excluir Contato");
	  System.out.printf("\n* 5         Sair\n");
	  resp = input.nextLine();
	  switch(resp)
	    {
	      case "1":
	      {
	        name = JOptionPane.showInputDialog("Digite o nome do novo contato .:");
	        email = JOptionPane.showInputDialog("Digite o email do novo contato .:");
	        telefone = JOptionPane.showInputDialog("Digite o telefone do novo contato .:");
	        cont.AdicionaDados(name, email, telefone);
	        break;
	      } 
	      case "2":
	      {
	        break;
	      }
	      case "3":
	      {
	        cont.Pesquisa();
	        break;
	      }
	      case "4":
	      {
	        break;
	      }
	    } 
	    
	  }while (!"5".equals(resp));
	  System.out.printf("Obrigado por usar a agenda");
	  		
	}
	}
import java.io.BufferedReader;
import java.io.BufferedWriter;      
import java.io.File;      
import java.io.FileReader;
import java.io.FileWriter;      
import java.io.IOException;      
import java.nio.Buffer;    
import java.util.ArrayList;      
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JOptionPane;

public class contatos {      
	   agendafatec2 agenda = new agendafatec2();
       String name,telefone,email;      
             
       ArrayList<String>Cont = new ArrayList<String>();      
       ArrayList<String>Email = new ArrayList<String>();      
       ArrayList<String>Telefone = new ArrayList<String>();      
             
       public void AdicionaDados(String name,String email,String telefone)      
       {      
          Cont.add(name);      
          Cont.add(email);         
          Cont.add(telefone);      
       
                
         try{
          File file = new File("contatos.txt");
          FileWriter writer = new FileWriter(file,true);
          BufferedWriter buffer = new BufferedWriter(writer);
          buffer.newLine();
          buffer.newLine();
          buffer.write("Nome: "+name);   
          buffer.newLine();
          buffer.write("Email do Contato "+email);    
          buffer.newLine();
          buffer.write("Telefone do Contato "+telefone);   
          buffer.close();    
      }    
      catch(IOException e){    
         e.printStackTrace();      
              
      }    
        
      System.out.println("Contato Adicionado Com Sucesso!");    
          
      System.exit(0);    
    }    
       public void procuraArquivo() throws Exception{  
    	   
           BufferedReader b  = new BufferedReader(new FileReader("contatos.txt"));  
     
           StringBuffer textoDoArquivo = new StringBuffer();  
           String linha = null;  
           while((linha = b.readLine()) !=null){  
               textoDoArquivo.append(linha);  
           }  
             
           System.out.print("Digite a letra a ser pesquisada: ");  
           String palavra = new Scanner(System.in).next();  
     
           Matcher m = Pattern.compile(palavra).matcher(textoDoArquivo);  
           int numeroDeOcorrencias = 0;  
           while (m.find()){  
               numeroDeOcorrencias++;  
           }  
           System.out.println("Total de palavras encontradas: " + numeroDeOcorrencias);  
             
           b.close();  
       }
       public void Pesquisa() {
       File bd = new File ("contatos.txt");
       int flag=0;
       if (bd.exists()){
       try{
       FileReader fr = new FileReader(bd);
       BufferedReader ler = new BufferedReader (fr);
       String temp="", a="", nome="";	
       nome = JOptionPane.showInputDialog("Digite o Nome:");

       while ((temp=ler.readLine())!=null){
       a += temp+"\n";	
       if (temp.equals("Nome: "+nome))	
       flag = 1;

       }	

       if (flag == 1)
       JOptionPane.showMessageDialog(null,a);
       else
       JOptionPane.showMessageDialog(null,"Nome não encontrado");

       }
       catch (IOException ex){
       JOptionPane.showMessageDialog(null, "Erro na leitura");
       }	

       }
       System.exit(1);	

       }
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

public class altera{

	public void alteracao(String nome,String nomealterado,String temp,String a){
		       File bd = new File ("contatos.txt");
		       int flag=0;
		       if (bd.exists()){
		       try{
		       FileReader fr = new FileReader(bd);
		       BufferedReader ler = new BufferedReader (fr);
		       nome = JOptionPane.showInputDialog("Digite o Nome:");
		       nomealterado = JOptionPane.showInputDialog("Digite o novo nome do contato.:");

		       while ((temp=ler.readLine())!=null){
		       a += temp+"\n";	
		       if (temp.equals("Nome: "+nome))	
		       flag = 1;
               }
		       if (flag == 1){
		       FileWriter file = new FileWriter("contatos.txt",true);
		       BufferedWriter buffer = new BufferedWriter(file);
		       buffer.write("Nome: "+nomealterado);
		       }
		       }
		       catch (IOException ex){
		  }
	}
}
}

Você não pode, ao mesmo tempo, ler e escrever em um arquivo-texto, a menos que todas as linhas tenham o mesmo comprimento e você use RandomAccessFile; e mesmo assim, não é possível você inserir ou deletar linhas, apenas acrescentar novas linhas. O que normalmente se faz é ler completamente o arquivo, gravar o resultado em outro, e se tudo der certo, apagar o arquivo original e renomear o arquivo gravado.