1
resposta

Escrever no final do arquivo ao inves de sobreescrever o conteudo

Boa noite, estou com o seguinte código:

if(verificaExiste(nomeArquivo)) {
            PrintWriter pw = new PrintWriter(nomeArquivo, "UTF-8");
            System.out.println("Digite o conteudo do arquivo: ");

            InputStreamReader ist = new InputStreamReader(System.in);
            BufferedReader conteudoArquivo = new BufferedReader(ist);

          String linhas = conteudoArquivo.readLine();
        while(!linhas.equals("")) {
                pw.println(linhas);
                linhas = conteudoArquivo.readLine();
            }
            pw.close();

        } else {
            throw new ArquivoInexistenteException();
        }

Esse código verifica a existência do nome do arquivo passado por parametro. Se o arquivo nao existir ele lança uma exceção ArquivoInexistenteException, que eu mesmo criei. Se o arquivo existir ele vai lendo dados do teclado do usuário e gravando no arquivo, até a hora que o usuário apertar enter (linha vazia).

Funciona. O arquivo é gerado certinho. Depois tenho uma função para leitura, e le certinho tambem .

Porem, agora estou com o seguinte problema. Eu quero adicionar mais linhas, e para isso chamo essa mesma função. Só que ai inves de adicionar essas linhas no FINAL DO ARQUIVO , ele SOBREESCREVE Baseado no código e nas explicações, alguém poderia gentilmente me auxiliar com essa dúvida? Como adiciono no final do arquivo inves de sobreescrever? Já tentei usar append e outras coisas, nada deu certo.

Agradeço.

1 resposta

Olá Raphael, tudo certinho?

Desculpa pela demora em obter retorno.

Pesquisando aqui, vi que, para conseguir escrever ao final do arquivo, você pode instanciar um FileWriter com um segundo parâmetro true. No seu código, ficaria assim:

        BufferedWriter bw = new BufferedWriter(new FileWriter(nomeArquivo, true));
         PrintWriter pw = new PrintWriter(bw);

Repare que, caso quisesse fazer algo semelhante somente com FileWriter, não seria possível, pois precisaríamos de um OutputStream para passar o true como parâmetro. Daria pra fazer dessa outra forma:

        OutputStream fos = new FileOutputStream("lorem2.txt");
         PrintWriter pw = new PrintWriter(fos, true);

Espero ter ajudado! Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software