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

Problema com BufferedWriter - Não escreve no arquivo de saída.

Olá,

Alguém sabe me explicar porque o código abaixo não está escrevendo dentro do arquivo?

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class TesteIO {

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

        InputStream is = System.in;
        Scanner entrada = new Scanner(is);

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

        System.out.println("Digite sua mensagem:");

        while(entrada.hasNextLine()){
            String linha = entrada.nextLine();
            bw.write(linha);
            bw.newLine();
        }

        entrada.close();
        bw.close();

    }

}
7 respostas

Daniel boa noite, kkk essa parte das entradas e saidas são bem chatinhas né? mais logo logo você já está dominando. Dando uma olhada no seu código, percebi que você só manda ler a mensagem colocando um campo com o

System.out.println("Digite a sua mensagem");

mais não vi aonde a sua mensagem vai ser digitada, sera que no seu código não está faltando alguma parte?

solução!

Daniel,

Dentro do seu while, tenta colocar seu BufferedWriter para dar flush, desse modo:

while(entrada.hasNextLine()){
            String linha = entrada.nextLine();
            bw.write(linha);
            bw.newLine();
        bw.flush();
        }

O bw só vai escrever no arquivo quando ele dar o flush, isso geralmente ocorre automaticamente quando ele enche o seu buffer, ou seja, se voce colocar uma mensagem pequena, é possível que o flush não esteja ocorrendo.

Ah, e lembre-se que depois de escrever a mensagem no console, você precisar apertar o "enter" para o programa conseguir ler a linha.

Se der certo, você pode até dar essa sugestão do flush ao instrutor, ou alguém pode te explicar melhor como o flush funciona.

Abraços

Daniel rapidamente me lembro que o BufferedWriter é para criar arquivo e não para escrever dentro da sua pasta, posso tar errado... Mais tenta rodar ele e da um dê um refresh no seu projeto (clicando da direita no nome do projeto, refresh) e veja que ele criou um arquivo saida.txt no diretório.

Muito bom Luis Eduardo .

Funcionou perfeitamente. Só queria entender porque quando se usa o Scanner se faz necessário o uso do flush(). Vou pesquisar sobre isto.

Muito obrigado!

Meu código compilou após ler as dúvidas dos colegas.

Mas não localizei o arquivo de saida.txt.

Grato

Fernando, ler as dúvidas é importante, mas quando você tiver uma dúvida nova e não conseguir resolver apenas lendo os outros posts é melhor postar um novo tópico e dizer exatamente o seu problema. Se o arquivo tiver sido criado ele vai estar dentro do seu projeto.

Certinho Vania. Encontrei o arquivo. Pode deixarvou seguir as orienações

Abs...