Problemas com BufferedReader / PrintWriter?
-
05-07-2019 - |
Pergunta
Eu estou usando BufferedReader e PrintWriter para percorrer cada linha de um arquivo de entrada, fazer uma alteração em algumas linhas, e de saída o resultado. Se uma linha não sofrer uma mudança, é apenas impresso como é o arquivo de saída. Por alguma razão, no entanto, o processo termina prematuramente. A aparência de código algo como isto:
BufferedReader in = new BufferedReader(new FileReader("in.txt"));
FileOutputStream out = new FileOutputStream("out.txt");
PrintWriter p = new PrintWriter(out);
String line = in.readLine();
while(line!=null)
{
if(line is special)
do edits and p.println(edited_line);
else
p.println(line);
line = in.readLine();
}
No entanto, por algum motivo estranho, esse processo terminar prematuramente (na verdade imprime uma metade de uma linha), mesmo no final do meu arquivo de entrada. Qualquer razão óbvia para isso? O loop enquanto está claramente a ser terminado por um nulo. E é no final do meu arquivo txt linha de 250k +. Obrigado!
Solução
Onde você lavar / fechar o seu PrintWriter ou FileOutputStream? Se o programa é encerrado e isso não for feito, nem todos os resultados vão ser escrita.
Você precisa out.close()
(possivelmente um p.flush()
também?) No final do seu processo para fechar o fluxo de saída de arquivo
Outras dicas
Tente adicionar um p.flush () após o loop.
PrintWriter não tem autoflushing habilitado, então é bem provável que o último bit do arquivo não é esvaziada antes de termina do programa.
Adicionando um
p.flush()
após o loop while deve fazer o truque.