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