Problemas para alterar dados (acesso a arquivos txt)

Olá
Estou com uma dúvida há mais de 10 dias e só agora resolvi solicitar um help aos colegas do GUJ.
Como disse venho tentando fazer uma aplicação java com acesso a arquivos txt. A aplicação foi feita corretamente com

leitura, cadastro e alteração dos dados. todas funcionam, no entanto a alteração vem me dando dor de cabeça porque não

funciona do jeito que quero.
O que acontece é o seguinte: a classe principal (void main) possui um switch - case para que usuário possa escolher as

opções (CADASTRAR, CONSULTAR ou EFETUAR VENDA). A opção Efetuar Venda (representada pela classe

“alteracaoVenda”) recebe o código da mercadoria e a quantidade vendida, que por sua vez serão consultados e apenas

alterado o campo quantidade. Ou seja, toda vez que for feita uma venda, esta classe irá alterar a quantidade vendida,

somando o valor existente com o valor vendido de modo que haja controle do que esta sendo vendido. A classe

“alteracaoVenda” funciona coretamente somente no primeiro acesso ao arquivo txt. Nos próximo acessos a classe

“alteracaoVenda” efetua a alteração da quantidade de acordo com o código digitado, porém os registros são duplicados.

Por exemplo: estão cadastrados #1 ARROZ 10.00 2
#2 FRANGO 45.50 21
----- Como disse

a primeira alteração é feita normalmente, já na segunda o primeiro item é alterado porém fica assim:
#1 FEIJÃO 15.30 7
#2 FRANGO 45.50 21
#1 ARROZ 10.00 2
#2 FRANGO 45.50 21

Na próxima alteração esse número se transforma em 8 e depois em 16 e depois em 32 e assim sucessivamente. Se eu efetuar a venda de 8 mercadorias o meu banco de registros será duplicado 7 vezes por exemplo.
Como posso fazer com que esta classe funcione corretamente sem que ocorra este problema? ouvi dizer em uma possibilidade de destruição de método. Como posso fazer isso?
A Classe “alteracaoVenda” se encontra abaixo.
Muito obrigado e aguardo ajuda.
Leandro M.

[color=darkblue][code]import java.io.*;
class alteracaoVenda {

static StringBuffer memoria = new StringBuffer ();

public void incluindoVenda(String Cod, String QuantidadeII){
	
	try{
		BufferedReader entrada;
		entrada = new BufferedReader (new InputStreamReader (System.in));
		
		BufferedReader arqentrada;
		arqentrada = new BufferedReader (new FileReader("C:\\Documents and 

Settings\Leandro\Desktop\CadMercadoria.txt"));

		String Quantidade = "";
		String Valor = "";
		String linha = "";
		
		while ((linha = arqentrada.readLine()) != null){
			memoria.append(linha + "\n");
			
		}
		int inicio = -1;
		inicio = memoria.indexOf (Cod);
		
		if(inicio != -1){
			int ultimo = memoria.indexOf ("\t", inicio);
			
			Cod = Ler (inicio, ultimo);
			int primeiro = ultimo + 1;
			ultimo = memoria.indexOf ("\t",primeiro);
			
			Quantidade = Ler (primeiro, ultimo);
			primeiro = ultimo + 1;
			int fim = memoria.indexOf("\n", primeiro);
			
			Valor = Ler (primeiro, fim);
			
			// Classe que retorna o valor lido no arquivo txt				regAgendaVenda regAg1 = new regAgendaVenda (Cod, Quantidade, Valor);
			
			System.out.println(" Quantidade: " + regAg1.mostraQuantidade() + " :::: " + 

"Valor: " + regAg1.mostraValor());

			// transforma os valores retornado do arquivo txt e a quantidade vendida 

referente a quantidade em int para que possa ser feito o calculo de soma entre o valor existente com a quantidade

vendida. int intQuant = Integer.parseInt(Quantidade);
int intQuantII = Integer.parseInt(QuantidadeII);
intQuantII = (intQuantII + intQuant);
QuantidadeII = Integer.toString(intQuantII);
regAg1.alteraQuantidade(QuantidadeII); // o valor já calculado é

disponibilizado para a alteração.
memoria.replace (inicio, fim, regAg1.mostraCodigo() + “\t” +

regAg1.mostraQuantidade() + “\t” + regAg1.mostraValor());
gravar();
arqentrada.close();
}else{
System.out.println(“Item nao encontrado”);

		}
		arqentrada.close();
	}catch(FileNotFoundException erro){
		System.out.println("Arquivo nao encontrado");
	}catch(Exception erro){
		System.out.println("Erro de leitura!");
	}
	System.gc();
}

public static String Ler (int primeiro, int ultimo){
	String dados = "";
	char [] destino = new char [ultimo - primeiro];
	memoria.getChars (primeiro, ultimo, destino, 0);
	for (int i = 0; i< destino.length; i++){
		dados += destino[i];
	}
	return dados;
}

public static void gravar (){
	try{
		BufferedWriter saida;
		saida = new BufferedWriter (new FileWriter("C:\\Documents and Settings\\Leandro 

Marques\Desktop\Restaurante\CadMercadoriaII.txt"));
saida.write(memoria.toString());
saida.flush();
saida.close();
}catch(Exception erro){
System.out.println(“Erro de gravacao”);
}
}
}[/code][/color]