Problemas para alterar dados (acesso a arquivos txt)

0 respostas
Leandro_M

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]
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");
		}
	}
}
[/color]
Criado 25 de julho de 2007
Respostas 0
Participantes 1