Dúvida substituir String em arquivo de txt

Pessoal estou montando um código, onde eu devo ler um arquivo .txt e mudar algumas Strings nele.

Ex: assim eu leio o arquivo e onde estiver escrito “teste” eu quero q mude para “teste 2”… até ai está td ok, eu uso um Pattern q busca essa String e mudo ela com um replaceAll, o problema é q, ele não substitue no local certo onde está a primeira String “teste”, ele grava no final do arquivo a String “teste 2”…

Alguem conhece alguma forma de fazer isso, ou se é possivel… segue meu código


BufferedReader leitorDestino = new BufferedReader(new FileReader(destinoFile));
			
FileWriter writer = new FileWriter(destino,true);
			
while((linhaDestino = leitorDestino.readLine()) != null) {
				
Pattern pega = Pattern.compile("teste");
Matcher m = pega.matcher(linhaDestino);
	
if(m.find()){

PrintWriter saida = new PrintWriter(writer);
					
String valor = m.group();

String end = linhaDestino.replaceAll("teste","teste 2");
saida.write(end);

Aguardo por ajuda Pessoal

Eu usaria um programa como o “sed” ou o “awk” para fazer esse tipo de alterações :stuck_out_tongue:

Vc poderia me passar alguma referencia??

Obrigado pela ajuda…

No seu caso o problema é relativamente simples, e você está “quase” no caminho certo.
Só que você não pode fazer como você tentou fazer (usar o mesmo arquivo para entrada e saída) - no mínimo você iria “estragar” o arquivo).
Isso não pode ser feito para arquivos-texto.
Você pode criar um arquivo temporário para saída, e depois copiar o arquivo sobre o arquivo de entrada, se tudo der certo.

Foi isso q eu fiz… mas oq eu queria mesmo era apenas substituir uma string e não refazer o arquivo mudando apenas uma linha…

Você só pode escrever coisas no fim de um arquivo texto, ou então, se for abrir o arquivo como um arquivo binário, só pode substituir por dados que tenham exatamente o mesmo tamanho. Não é possível fazer isso que você quer (aumentar o tamanho do arquivo escrevendo no meio). Você tem de fazer como fez antes (criar um novo arquivo, só para substituir uma ou duas linhas).

Ok… entendi…

Valeu thingol…

Obrigado pela ajuda cara…

Abs