Ajuda com trabalho de Java com manipulação de arquivos

Olá, galera ! Estou fazendo um trabalho que tem que fazer um sistema para distribuidora para controlar produtos e fornecedores em JAVA com manipulação de arquivos Txt. O trabalho já está 90% pronto, porém está com uns pequenos bugs. Como por exemplo, quando o programa não está com nenhuma informação cadastrada no arquivo txt e eu vou na opção pesquisar, excluir ou baixar estoque do produto, ele não está informando nenhuma msg de aviso, como: “código não encontrado” ou “arquivo vazio”, embora eu já ter implementado uma condição para ele fazer isso. Alguem poderia dá uma olhada ? Ficaria muito agradecido se puderem me ajudar.
Segue o link de download do trabalho .doc e workspace dos arquivos em Java pelo Google Drive.
Link de Download: https://drive.google.com/folderview?id=0B1byGOA6GJMWd0lDWXFweHpzVlk&usp=sharing

Aqui está o Main do trabalho:

package trabalho;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Locale;

import javax.swing.JOptionPane;
import io.InOut;

public class MainDistribuidora {
	static StringBuffer memoria = new StringBuffer();
	static int aux=1;
	public static void main(String[] args) {
		char resp = 'N';
		char opcao;
		try {
			do {
				opcao = menu();

				switch (opcao) {
				case '1':

					char forn = InOut.leChar("Escolha:\n"
							+ "1 - Cadastrar Fornecedores:\n"
							+ "2 - Pesquisar fornecedores cadastrados:\n" 
							+ "3 - Voltar:\n");

					switch (forn) {

					case '1':
						inserirFornecedores();

						break;
					case '2':
						pesquisarFornecedores();
						break;

					default:
						break;

					}
					break;

				case '2':

					char prod = InOut.leChar("Escolha:\n"
							+ "1 - Cadastrar produtos:\n"
							+ "2 - Pesquisar produtos cadastrados:\n"
							+ "3 - Excluir produtos cadastrados:\n"
							+ "4 - Baixar estoque do produto:\n"
							+ "5 - Voltar:\n");
					switch (prod) {
					case '1':
						if(inserirProdutos())
							aux++;
						break;
					case '2':
						pesquisarProdutos();
						break;
					case '3':
						excluirProdutos();
						break;
					case '4':
						baixarProduto();
					default:
						break;
					}
					break;

				case '3':
					resp = Character.toUpperCase(InOut.leChar("Deseja realmente sair do programa? S/N"));
					break;

				default:
					InOut.MsgDeInformação("", "opção invalida, tente novamente");

				}

			} while (resp != 'S');
			System.exit(0);
		} catch (Exception e) {

		}

	}

	public static String ler(int primeiro, int ultimo) {// PERCORRE O ARQUIVO
		String dados = "";
		dados = memoria.substring(primeiro, ultimo);
		return dados;

	}
	private static void inserirFornecedores() {// CADASTRO DE FORNECEDORES
		try {

			BufferedWriter saida;

			saida = new BufferedWriter(new FileWriter("fornecedores.txt", true));// NOME
			// DO
			// ARQUIVO
			// QUE
			// SERÁ
			// GRAVADO
			String nomeForn = InOut.leString(" Informe o nome do fornecedor");
			nomeForn = nomeForn.toUpperCase();
			String cpfForn = InOut.leString(" Informe o CPF do fornecedor");
			String telefoneForn = InOut.leString(" Informe o telefone do fornecedor");

			cadastroFornecedor cadE = new cadastroFornecedor (nomeForn, cpfForn, telefoneForn);
			saida.write(cadE.getNome() + "\t");
			saida.write(cadE.getCpf() + "\t");
			saida.write(cadE.getTelefone() + "\n");

			saida.flush();
			saida.close();// GRAVA EM ARQUIVO
			JOptionPane.showMessageDialog(null,"Operação realizada com sucesso");

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Erro de gravação");

		}
	}

	static void iniciarArquivoFornecedores() {
		String linha;
		try {
			BufferedReader arqEntrada;
			arqEntrada = new BufferedReader(new FileReader("fornecedores.txt"));
			linha = "";
			memoria.delete(0, memoria.length());
			while ((linha = arqEntrada.readLine()) != null) {
				memoria.append(linha + "\n");
			}
			arqEntrada.close();
		} catch (FileNotFoundException erro) {
			InOut.MsgDeAviso("", "Arquivo não encontrado");
		} catch (Exception e) {
			InOut.MsgDeErro("", "Erro de Leitura !");
		}
	}

	public static void pesquisarFornecedores() {    
		try {
			// BUSCA EQUIPAMENTO CADASTRO PELO CÓDIGO

			String nome, cpf , telefone;
			int inicio = -1, fim, ultimo, primeiro;
			iniciarArquivoFornecedores();

			String arquivo = "fornecedores.txt";
			BufferedReader arqentrada;
			arqentrada = new BufferedReader(new FileReader(arquivo));
			if (memoria.length() != 0) {
				nome = InOut.leString("Digite o nome para pesquisar:");
				nome=nome.toUpperCase();
				String linha;
				cpf = "";
				telefone = "";

				while ((linha = arqentrada.readLine()) != null) {
					memoria.append(linha + "\n");

				}
				inicio = memoria.indexOf(nome);

				if (inicio != -1) {

					ultimo = memoria.indexOf("\t", inicio);// PERCORRE OS CAMPOS
					// DO ARQUIVO
					nome = ler(inicio, ultimo);
					primeiro = ultimo + 1;

					ultimo = memoria.indexOf("\t", primeiro);
					cpf = ler(primeiro, ultimo);
					primeiro = ultimo + 1;

					fim = memoria.indexOf("\n", primeiro);
					telefone = ler(primeiro, fim);

					cadastroFornecedor cadE = new cadastroFornecedor(
							nome,cpf, telefone);

					InOut.MsgDeInformação(
							"",
							"Nome do Fornecedor:"
									+ cadE.getNome() + "\n"
									+ " CPF do Fornecedor: " + cadE.getCpf()
									+ "\n\t" + " Telefone "
									+ cadE.getTelefone() +"\n");

				} else {
					JOptionPane.showMessageDialog(null, "Não cadastrado");

				}

			}
			arqentrada.close();
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Erro de leitura");
		}
	}


	static void iniciarArquivoProdutos() {
		String linha;
		try {
			BufferedReader arqEntrada;
			arqEntrada = new BufferedReader(new FileReader("produtos.txt"));
			linha = "";
			memoria.delete(0, memoria.length());
			while ((linha = arqEntrada.readLine()) != null) {
				memoria.append(linha + "\n");
			}
			arqEntrada.close();
		} catch (FileNotFoundException erro) {
			InOut.MsgDeAviso("", "Arquivo não encontrado");
		} catch (Exception e) {
			InOut.MsgDeErro("", "Erro de Leitura !");
		}
	}

	public static void gravarProdutos() {
		try {
			BufferedWriter arqSaida;
			arqSaida = new BufferedWriter(new FileWriter("produtos.txt"));

			arqSaida.write(memoria.toString());
			arqSaida.flush();
			arqSaida.close();
		} catch (Exception erro) {
			InOut.MsgDeErro("", "Erro de gravação!");
		}
	}
	private static boolean inserirProdutos() {// CADASTRO DE PRODUTOS
		try {

			BufferedWriter saida;

			saida = new BufferedWriter(new FileWriter("Produtos.txt", true));// NOME
			// DO
			// ARQUIVO
			// QUE
			// SERÁ
			// GRAVADO

			String cpfForn = InOut.leString(" Informe o CPF do fornecedor");

			String descricao = InOut.leString(" Informe a descrição do produto");
			int estoque = InOut.leInt(" Informe a quantidade de estoque");
			double preco  = InOut.leDouble(" Informe o preço do produto");
			//	String telefoneForn = InOut.leString(" Informe o telefone do fornecedor");

			cadastroProduto cadP = new cadastroProduto ( aux,cpfForn,descricao, estoque, preco);
			saida.write(aux + "\t");
			saida.write(cadP.getCpfForn() + "\t");
			saida.write(cadP.getDescricao() + "\t");
			saida.write(cadP.getEstoque() + "\t");
			saida.write(cadP.getPreco() + "\n");
			saida.flush();
			saida.close();// GRAVA EM ARQUIVO

			JOptionPane.showMessageDialog(null,"Operação realizada com sucesso");

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Erro de gravação");

		}
		return true;
	}
	public static void pesquisarProdutos() {    
		try {
			// BUSCA EQUIPAMENTO CADASTRO PELO CÓDIGO
			boolean achou=false;
			String codProduto, cpfForn, descricao , estoque, preco;
			int inicio = 0, fim, ultimo, primeiro, procura;
			iniciarArquivoProdutos();

			String arquivo = "Produtos.txt";
			BufferedReader arqentrada;
			arqentrada = new BufferedReader(new FileReader(arquivo));
			if (memoria.length() != 0)
			{
				procura=InOut.leInt("Digite o código para pesquisar:");
				String linha;
				cpfForn = "";
				descricao = "";
				estoque = "";
				preco = "";


				while ((linha = arqentrada.readLine()) != null) {
					memoria.append(linha + "\n");

				}

				inicio = 0;

				if (inicio != -1)  
					while (inicio != memoria.length()&& (!achou))
					{
						ultimo = memoria.indexOf("\t", inicio);// PERCORRE OS CAMPOS
						// DO ARQUIVO
						codProduto = ler(inicio, ultimo);
						primeiro = ultimo + 1;

						ultimo = memoria.indexOf("\t", primeiro);
						cpfForn = ler(primeiro, ultimo);
						primeiro = ultimo + 1;

						ultimo = memoria.indexOf("\t", primeiro);
						descricao = ler(primeiro, ultimo);
						primeiro = ultimo + 1;


						ultimo = memoria.indexOf("\t", primeiro);
						estoque = ler(primeiro, ultimo);
						primeiro = ultimo + 1;

						fim = memoria.indexOf("\n", primeiro);
						preco = ler(primeiro, fim);

						cadastroProduto cadP = new cadastroProduto(
								Integer.parseInt(codProduto),
								cpfForn,
								descricao, 
								Integer.parseInt(estoque),
								Double.parseDouble(preco));

						if (procura==cadP.getCodProduto()){
							InOut.MsgDeInformação(
									"",
									"Código do Produto:"
											+ cadP.getCodProduto() + "\n"
											+ " CPF: " + cadP.getCpfForn()
											+ "\n\t" + " Descrição: "
											+ cadP.getDescricao() + "\n\t"
											+ " Quantidade em estoque: "
											+ cadP.getEstoque() + "\n\t"
											+ " Preço do produto: "
											+ cadP.getPreco() + "\n\t"
											+ "\n");
							achou=true;
						}else inicio=fim+1;
					} else {
						JOptionPane.showMessageDialog(null, "Não cadastrado");

					}
			}
			arqentrada.close();
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Erro de leitura");
		}

	}
	private static void excluirProdutos() {
		String codProduto, cpfForn, descricao, estoque, preco;
		char resp;
		int inicio = -1, fim, ultimo, primeiro;
		iniciarArquivoProdutos();
		if (memoria.length() != 0) {
			codProduto = InOut.leString(" Digite o código para excluir");
			inicio = memoria.indexOf(codProduto);

			codProduto = "";
			cpfForn = "";
			descricao = "";
			estoque = "";
			preco = "";

			if (inicio != -1) {
				ultimo = memoria.indexOf("\t", inicio);
				codProduto = ler(inicio, ultimo);
				primeiro = ultimo + 1;

				ultimo = memoria.indexOf("\t", primeiro);
				cpfForn = ler(primeiro, ultimo);
				primeiro = ultimo + 1;

				ultimo = memoria.indexOf("\t", primeiro);
				descricao = ler(primeiro, ultimo);
				primeiro = ultimo + 1;

				ultimo = memoria.indexOf("\t", primeiro);
				estoque = ler(primeiro, ultimo);
				primeiro = ultimo + 1;

				fim = memoria.indexOf("\n", primeiro);
				preco = ler(primeiro, fim);

				cadastroProduto cadP = new cadastroProduto(
						Integer.parseInt(codProduto),
						cpfForn,
						descricao, 
						Integer.parseInt(estoque),
						Double.parseDouble(preco));

				resp = Character.toUpperCase(InOut
						.leChar(" Deseja excluir? Digite S ou N \n\n"
								+ "codigo do Produto: "
								+ cadP.getCodProduto() + "\n"
								+ " CPF do fornecedor: "
								+ cadP.getCpfForn() + "\n"
								+ " Descrição: " + cadP.getDescricao()
								+ "\n" + " Estoque: "
								+ cadP.getEstoque() + "\n" + "Preço: "
								+ cadP.getPreco() + "\n" ));

				if (resp == 'S') {
					memoria.delete(inicio, fim + 1);
					InOut.MsgDeInformação("", "Registro excluido.");
				} else {
					InOut.MsgDeInformação("", "Exclusão cancelada.");
				}
				gravarProdutos();
			} else {
				InOut.MsgDeAviso("", "Codigo não encontrado");

			}

		}
	}


	private static void mostrarProdutos() {
		String cpfForn, codProduto, descricao, estoque, preco;
		String resp = "Produtos cadastrados\n";
		int inicio, fim, ultimo, primeiro;
		iniciarArquivoProdutos();
		inicio = 0;
		if (memoria.length() != 0) {

			while (inicio != memoria.length()) {
				cpfForn = "";
				codProduto = "";
				descricao = "";
				estoque = "";
				preco = "";
				if (inicio != -1) {
					ultimo = memoria.indexOf("/t", inicio);
					cpfForn = ler(inicio, ultimo);
					primeiro = ultimo + 1;

					ultimo = memoria.indexOf("/t", inicio);
					codProduto = ler(inicio, ultimo);
					primeiro = ultimo + 1 ;

					ultimo = memoria.indexOf("/t", inicio);
					descricao = ler(inicio, ultimo);
					primeiro = ultimo + 1;

					ultimo = memoria.indexOf("/t", inicio);
					estoque = ler(inicio, ultimo);
					primeiro = ultimo + 1;

					fim = memoria.indexOf("/n", ultimo);
					preco = ler(primeiro, fim);
					cadastroProduto cadP = new cadastroProduto(
							Integer.parseInt(codProduto),
							cpfForn,
							descricao, 
							Integer.parseInt(estoque),
							Double.parseDouble(preco));
					resp += " Codigo:" + cadP.getCodProduto() + " Produto:"
							+ "\t" + cadP.getPreco() + "\n";
					inicio = fim + 1;
				}

			}
			InOut.MsgSemIcone(null, resp);

		}
	}

	public static void baixarProduto() {
		String codProduto, cpfForn, descricao, estoque, preco;
		int inicio, fim, ultimo, primeiro;
		boolean achou=false;
		int procura;
		iniciarArquivoProdutos();
		if (memoria.length() != 0) {
			procura = InOut.leInt(" Digite o codigo para alterar:");
			codProduto = "";
			cpfForn = "";
			descricao = "";
			estoque = "";
			preco = "";
			inicio = 0;

			while (inicio != memoria.length()&& (!achou)){

				ultimo = memoria.indexOf("\t", inicio);
				codProduto = ler(inicio, ultimo);
				primeiro = ultimo + 1;

				ultimo = memoria.indexOf("\t", primeiro);
				cpfForn = ler(primeiro, ultimo);
				primeiro = ultimo + 1;

				ultimo = memoria.indexOf("\t", primeiro);
				descricao = ler(primeiro, ultimo);
				primeiro = ultimo + 1;

				ultimo = memoria.indexOf("\t", primeiro);
				estoque = ler(primeiro, ultimo);
				primeiro = ultimo + 1;

				fim = memoria.indexOf("\n", primeiro);
				preco = ler(primeiro, fim);

				cadastroProduto cadE = new cadastroProduto(
						Integer.parseInt(codProduto), cpfForn,descricao,Integer.parseInt(estoque),Double.parseDouble(preco));
				if (procura==cadE.getCodProduto()){
					InOut.MsgDeInformação("", "Descrição: " + cadE.getDescricao() +
							"\n" + "Estoque: " + cadE.getEstoque());
					estoque = InOut.leString("Digite a quantidade a ser baixada do estoque");
					if((cadE.getEstoque()-Integer.parseInt(estoque))<=0)
						InOut.MsgDeInformação("","Não foi possivel realizar a operação");
					else
						cadE.setEstoque(cadE.getEstoque()-Integer.parseInt(estoque));
					InOut.MsgDeAviso(null,"Quantidade atual do estoque : "+cadE.getEstoque());
					memoria.replace(inicio,fim,	cadE.getCodProduto() + "\t"
							+ cadE.getCpfForn()+ "\t"
							+ cadE.getDescricao()+ "\t"
							+ cadE.getEstoque()+ "\t"
							+ cadE.getPreco()+ "\t"
							+ "\r\n");

					gravarProdutos();
					achou = true;
				}
				inicio = fim + 1;
			}

			if (achou){

			}else{
				InOut.MsgDeErro("","Código não encontrado");
			}

		}else{
			InOut.MsgDeErro("","Arquivo vazio");
		}
	}

	static char menu() 
	{Locale localBR = new Locale("pt", "BR");
	Calendar agora = Calendar.getInstance();
	DateFormat formatoDeData = DateFormat.getDateInstance(DateFormat.FULL,
			localBR);

	return InOut.leChar(formatoDeData.format(agora.getTime())
			+ "\n\nSISTEMA DISTRIBUIDORA VERMELHA "
			+ "\n(Mateus Mascarenhas, Plassede Senra)"
			+ "\n\n Escolha uma Opção:\n" + "1- Menu - Fornecedores\n"
			+ "2- Menu - Produtos\n"
			+ "3- Sair");
	}

}

Galera, arrumei aquele problema. Agora, está com problema nesse metodo de excluir. Só está excluindo o 1º registro. Algum programador Java que possa me ajudar ?

[code]private static void excluirProdutos() throws IOException {
String codProduto, cpfForn, descricao, estoque, preco, linha;

	char resp; 
	int inicio = -1, fim, ultimo, primeiro;
	iniciarArquivoProdutos();
	if (memoria.length() != -1) {
		codProduto = InOut.leString(" Digite o código para excluir");
		inicio = memoria.indexOf(codProduto);
		codProduto = "";
		cpfForn = "";
		descricao = "";
		estoque = "";
		preco = "";

		if (inicio != -1) {
			ultimo = memoria.indexOf("\t", inicio);
			codProduto = ler(inicio, ultimo);
			primeiro = ultimo + 1;

			ultimo = memoria.indexOf("\t", primeiro);
			cpfForn = ler(primeiro, ultimo);
			primeiro = ultimo + 1;

			ultimo = memoria.indexOf("\t", primeiro);
			descricao = ler(primeiro, ultimo);
			primeiro = ultimo + 1;

			ultimo = memoria.indexOf("\t", primeiro);
			estoque = ler(primeiro, ultimo);
			primeiro = ultimo + 1;

			fim = memoria.indexOf("\n", primeiro);
			preco = ler(primeiro, fim);

			cadastroProduto cadP = new cadastroProduto(
					Integer.parseInt(codProduto),
					cpfForn,
					descricao, 
					Integer.parseInt(estoque),
					Double.parseDouble(preco));
			
			resp = Character.toUpperCase(InOut
					.leChar(" Deseja excluir? Digite S ou N \n\n"
							+ "codigo do Produto: "
							+ cadP.getCodProduto() + "\n"
							+ " CPF do fornecedor: "
							+ cadP.getCpfForn() + "\n"
							+ " Descrição: " + cadP.getDescricao()
							+ "\n" + " Estoque: "
							+ cadP.getEstoque() + "\n" + "Preço: "
							+ cadP.getPreco() + "\n" ));

			if (resp == 'S') {
				memoria.delete(inicio, fim + 1);
				InOut.MsgDeInformação("", "Registro excluido.");
			} else {
				InOut.MsgDeInformação("", "Exclusão cancelada.");
			}

			gravarProdutos();
		} else {
			InOut.MsgDeAviso("", "Codigo não encontrado");

		}
	}
}	[/code]