Solucionado (ver solução)
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.

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