Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Dúvida no Ex. 1 da Aula 4 - Pacote java.io

Estou tentando imprimir os textos que digito no console dentro do arquivo "saida.txt", conforme a vídeo aula. Digitei exatamente o código da aula, e lá é dito que após digitar as linhas de texto, deve-se "parar" o programa e atualizar o "saida.txt" para exibir a mensagem. Porém, após digitar as mensagens, as linhas não aparecem no meu arquivo "saida.txt", mesmo depois de clicar no botão de stop do meu Eclipse (o "Terminate"). Esse "parar" citado no vídeo é algum recurso diferente do Eclipse?

11 respostas

Creio que esta correto, pois se você esta lendo o arquivo ele vai ler o conteúdo que estava ao "Rodar" o programa, se você fizer alguma alteração no arquivo deve-se salvar e re-executar o programa para ler as informações inseridas.

Olá Matheus,

Não entendi sua explicação. Estou com o mesmo problema :/

Ola Andrew,

Acabei me confundindo com a primeira pergunta, agora que li com mais calma eu entendi.

Faz o seguinte, você tem que desenvolver todo o método main de acordo com a aula, após estar com ele pronto para receber o que você digitar no console.

InputStream is = System.in;

Basta apenas executa-lo que ele ficará em looping.

Enquanto você digita no console o programa esta em execução, ai quando você terminar de digitar o conteúdo que vai para seu "saida.txt" basta apenas parar o programa que ja esta em execução para o arquivo ser atualizado com o que você digitou no console.

Entendeu ?

Olá Matheus,

Segue o código:

InputStream is = System.in; // new FileInputStream("leitura.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

OutputStream os = new FileOutputStream("saida.txt");
        OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bw = new BufferedWriter(osw);

        String linha = br.readLine();
        while (linha != null) {
            bw.append(linha);
            bw.newLine();
            // System.out.println(linha);
            linha = br.readLine();
        }

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

O programa funciona corretamente, assim como você explicou. Eu digito no console e paro o programa porém por alguma razão ele não está gravando as informações digitadas no arquivo 'saida.txt'.

Diego e Andrew: não há nada de errado com o código de vocês.

Esta mesma classe, se compilada e executada via linha de comando, escreve as entradas do teclado no arquivo sem problema algum.

O problema se dá apenas via Eclipse. Não sei dizer ao certo o porquê.

Para rodar, então, chamem o flush do BufferedWriter dentro do laço while:

while (linha != null) {
    bw.append(linha);
    bw.newLine();
    bw.flush();
    linha = br.readLine();
}

Creio que valha uma explicação aqui: o flush serve para efetivamente escrever os dados, limpando o buffer.

Não deveria ser necessário, contudo, já que, no fechamento do BufferedWriter (bw.close()), o flush já é chamado implicitamente.

Como disse, essa necessidade de chamar o flush explicitamente se dá apenas via Eclipse. Algum pequeno bug, provavelmente.

Abraço.

Andrew eu peguei o código da sua classe e colei no meu eclipse, criei uma classe para testa-lo, o mesmo esta funcionando corretamente.

Tente atualizar seu eclipse ou mude a versão.

Como o André disse pode ser o problema no mesmo.

Obs: Estou usando o Eclipse Luna Java EE(mais recente).

solução!

Consegui fazendo da seguinte maneira.Ao rodar o programa, digitar a linha no console (vai estar em verde) e pressionar ENTER, basta pressionar ctrl+z. O eclipse vai interromper o programa e vc pode conferir o arquivo de saída.

Comigo aconteceu a mesma coisa.. Só consegui visualizar a saída no arquivo texto quando teclei ctrl+z.

Qual eclipse você esta usando Daniella ?

Boa noite Matheus, Eclipse Mars

Tenta fazer o teste no Luna, pois aqui para mim funciona normalmente executando o problema, digitando as frases e stopando no botão.