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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top