Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Meu arquivo não está salvando mesmo depois de apertar o botão Terminate do console

package br.com.alura.java.io.teste;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;

public class TesteCopiaArquivo {

    public static void main(String[] args) throws IOException {

        InputStream fis = System.in;
        Reader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);

        OutputStream fos = new FileOutputStream("lorem2.txt");
        Writer osw = new OutputStreamWriter(fos);
        BufferedWriter bw = new BufferedWriter(osw);

        String linha = br.readLine();

        while(linha != null) {

        bw.write(linha);
            bw.newLine();
            linha = br.readLine();
        }

        br.close();
        bw.close();

    }

}

Depois de apertar o botão Terminate do console do Eclipse o arquivo fica em branco, mesmo depois de atualizar. Alguém pode me dar uma ajuda aqui? Obrigado.

2 respostas
solução!

Olá tudo bem? Pelo o que vi o erro do seu codigo enta dentro do while:

 while(linha != null) {

        bw.write(linha);
            bw.newLine();
            linha = br.readLine();
        }

O laço nunca vai acabar, porque o valor da linha nunca sera null. O correto seria assim:

while(linha != null && !linha.isEmpty()) {

            bw.write(linha);
            bw.newLine();
            bw.flush();
            linha = br.readLine();
        }

Porque ai quando der uma linha vazia no console, ele irá encerrar o laço e gravar no arquivo.

Espero ter ajudado.

Oi David beleza?

O seu código deu certinho, obrigado. Mas o que faz a diferença não é bem a linha do while, pq sem o método:

!linha.isEmpty()

Quando eu aperto o botão Stop do console, o código deveria parar e salvar normalmente, mas parece que não está acontecendo isso.

Na verdade o que fez a diferença mesmo foi o método q vc colocou dentro do laço:

bw.flush();

Eu testei com e sem esse método e os registros só eram guardados quando eu usava o método.

Obrigado pela ajuda

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