Código só escreve no arquivo .txt se colocar o bw.flush();
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!
Código só escreve no arquivo .txt se colocar o bw.flush();
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();
}
}
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é!!!