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

flush

Código só escreve no arquivo .txt se colocar o bw.flush();

4 respostas

Oi Jackson, tudo bom?

Você também pode utilizar o PrintStream, se estiver com problemas com o BufferedWritter:


        public static void main(String[] args) throws IOException {
            Scanner entrada = new Scanner(new FileInputStream("arquivo.txt"));
            PrintStream saida = new PrintStream(new FileOutputStream("copia.txt"));
            while (entrada.hasNextLine()) {
                saida.println(entrada.nextLine());
            }
            saida.close();
            entrada.close();
        }

Mas, estranho você ter problemas com o flush, já que o método write já realiza o flush por baixo dos panos.

O que ocorre se você não utilizar o flush?

Compartilha com a gente aqu seu código que fica mais facil de discutir o problema.

Abraço.

package Alura3;

import java.io.*;
import java.util.Scanner;

public class EntradaDeUmArquivo {
    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();
            bw.flush();
        }
        entrada.close();
    }
}
solução!

Acredito que o problema seja a ordem das coisas. O método newLine cria uma nova linha, mas diferente do write não chama o flush automaticamente. Se você escrever o newLine antes do write acredito que funcione:

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

Uma alternativa é concatenar a quebra de linha no proprio write:

            bw.write(linha."\n");

Assim, não precisamos nem da chamada do newLine() nem do flush =)

Boa André!!!