Como modificar um arquivo txt no java?

Pessoal, estou tendo dificuldade em apagar um conjunto de linhas de um arquivo txt. Exemplo:
tenho um arquivo com listas de nomes : claudio
alexandre
matheus
roberto
milena
claudio
marcela
matheus
e quero q tudo q esteja entre “claudio” e “matheus” seja apagado restado apenas : alexandre, roberto, milena e marcela.
Se alguém puder me ajudar, ficarei grata

Qual sua dificuldade exatamente?

Para arquivos pequenos, ao invés de modificar, o mais simples seria gerar um novo arquivo com as mudanças que você quer. O processo seria:

  • Carregue o arquivo inteiro em memória (Files.readAllLines, Files.Files.lines)
  • Remova as linhas que nao quer, do objeto em memória em java
  • Escreva um novo arquivo com o conteúdo desejado (Files.write, Files.createFile)

AbelBueno Mas até aonde eu sei não tem como alterar um documento (ao menos em .txt) senão lendo ele, e reescrevendo o novamente.

Acho que você está praticamente certo.

Eu sei que você pode adicionar conteúdo no meio de um arquivo com a classe RandomAccessFile, por exemplo, e apagar conteúdo a partir do fim do arquivo, definindo um novo tamanho pro arquivo menor que o original.
Nao conheço uma maneira de simplesmente apagar conteúdo do meio do arquivo diretamente.

Mas na prática, é realmente muito mais fácil simplesmente reescrever o arquivo.

Se sua regra é “quero q tudo q esteja entre “claudio” e “matheus” seja apagado”… os nomes que restariam seriam: claudio, matheus, roberto, milena, claudio, matheus. Pois existem somnete duas ocorrências que estão entre claudio e matheus que são: alexandre e marcela.

Como você disse “restado apenas : alexandre, roberto, milena e marcela.”, acredito que sua regra de negócio seja: apagar todas as ocorrências de claudio e matheus.

Considerando que a regra seja a que citei acima. testei o código abaixo resolve seu problema.
Uma sugestão de melhoria seria enviar os nome que vc quer apagar como argumentos para o método tornando a escolha dos nomes a serem apagado dinâmica.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.File;
import java.io.PrintWriter;
import java.io.FileWriter;

public class BufferedReaderExample {

    public static void main(String[] args) {

        BufferedReader br = null;
        PrintWriter pw = null;
        File novoArquivo = null;
        File arquivoOriginal = null;

        try {
            novoArquivo = new File("D:\\Fábio\\Testes\\Guj\\arquivoAlterado.txt");
                pw = new PrintWriter(new FileWriter(novoArquivo));

            String linhaAtual;
            
            arquivoOriginal = new File("D:\\Fábio\\Testes\\Guj\\arquivoASerLido.txt");
            br = new BufferedReader(new FileReader(arquivoOriginal));

            while ((linhaAtual = br.readLine()) != null) {
                if(!linhaAtual.equals("claudio") && !linhaAtual.equals("matheus")){
                    System.out.println(linhaAtual);
                    pw.println(linhaAtual);
                    pw.flush();
                }
                
            }
                
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null){
                    br.close();
                    pw.close();
                }
                    
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

        if (!arquivoOriginal.delete()) {
                    System.out.println("O arquivo não pode ser deletado");
                    return;
            }
            if (!novoArquivo.renameTo(arquivoOriginal)){
                    System.out.println("O arquivo não pode ser renomeado");

        }        
    }
}

Tente usar somente parte desse código em sua solução parcialmente implementada (caso exista) para evitar programar totalmente orientado a ctrl+c ctrl+v.