Substituir uma regitso por * no ficheiro

2 respostas
Vanilson

Galera to com um problemão, eu tenho um ficheiro com varios registos, então eu gostaria de eliminar alguns registos do ficheiro. Eu pensei no seguinte, pesquisar o registo que pretende ser eliminado de seguida ler linha por linha e depois substituir toda linha que desejo eliminar por *, so que não está funcionando não acontence nada, eis o codigo:

public void actionPerformed(ActionEvent evento)
	{
		if(evento.getSource()==elimclientes)
		{
			try
			{
				String opcpesquisa;
				int opcpesquisaconv;
				int codigoconv;
				String nome;	
				String linha = null;
				fw = new FileWriter("clientes.txt", true);
				fr = new FileReader("clientes.txt");
				br = new BufferedReader(fr);
				opcpesquisa = JOptionPane.showInputDialog("Deseja eliminar por nome ou por numero da conta ? \n             (1 - Por nome, 2 - Por numero da conta)");
				opcpesquisaconv = Integer.parseInt(opcpesquisa);
				switch(opcpesquisaconv)
				{
					case 1:
						nome = JOptionPane.showInputDialog("Digite o nome do(a) cliente");
						while((linha = br.readLine())!=null)
						{
							
							if(linha.matches(".*" + nome + ".*"))
							{
									String dados[] = linha.split(",");
									JOptionPane.showMessageDialog(null,"Cliente: " +dados[1],"BPC",JOptionPane.ERROR_MESSAGE);
									for(int i=0; i<=5; i++)
									{
										dados[i]="*";
										fw.write(dados[i]);
									}						
							}
							
						}
						break;
					default:
						JOptionPane.showMessageDialog(null,"Opção invalida","BPC",JOptionPane.ERROR_MESSAGE);
					br.close();
					fw.close();
					
				}
			}
			catch (IOException e) 
			{
				JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
			}
		}
	}

2 Respostas

nel

Boa tarde.

O que você está fazendo na verdade é simplesmente criando um novo arquivo e não utilizando um já existente, sendo assim, ele não sobrescreve o que você deseja. Você deve primeiro ter acesso ao arquivo que contém os nomes dos seus clientes e quando encontrar o nome de quem deseja excluir pode substituir por linhas em branco ou * como preferir. Pelo o que eu sei, toda vez que der um new FileWriter() passando para o construtor uma string você vai estar criando um novo arquivo de saida, mesmo que utilize o mesmo nome ele nao vai sobrescrever o arquivo e sim criar um novo.

Abraços.

Vanilson

Bom cara, consegui superar o erro, ele estava a escrever novamente no ficheiro não está a substituir, eis o codigo:

public void actionPerformed(ActionEvent evento)
	{
		if(evento.getSource()==elimclientes)
		{
			try
			{
				String opcpesquisa;
				int opcpesquisaconv;
				int codigoconv;
				String nome;	
				String linha = null;
				fw = new FileWriter(ficheirocliente,true);
				fr = new FileReader("clientes.txt");
				br = new BufferedReader(fr);
				opcpesquisa = JOptionPane.showInputDialog("Deseja eliminar por nome ou por numero da conta ? \n             (1 - Por nome, 2 - Por numero da conta)");
				opcpesquisaconv = Integer.parseInt(opcpesquisa);
				switch(opcpesquisaconv)
				{
					case 1:
						nome = JOptionPane.showInputDialog("Digite o nome do(a) cliente");
						while((linha = br.readLine())!=null)
						{
							
							if(linha.matches(".*" + nome + ".*"))
							{
								String dados[] = linha.split(",");
								for(int i=0; i<=5; i++)
								{
									dados[i] = "*";
									fw.write(dados[i]);	
								}				
							}	
						}
						break;
					default:
						JOptionPane.showMessageDialog(null,"Opção invalida","BPC",JOptionPane.ERROR_MESSAGE);
					
					
									
				}
				br.close();
				fw.close();	
			}
			catch (IOException e) 
			{
				JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
			}
		}
	}
Criado 28 de novembro de 2009
Ultima resposta 28 de nov. de 2009
Respostas 2
Participantes 2