Certificar-se de arquivo é excluído na saída JVM
Pergunta
O File.deleteOnExit () garantia de que o arquivo é excluído, mesmo se a JVM é morto prematuramente?
Solução
A deleção será tentada apenas para terminação normal da máquina virtual, como definido pela especificação da linguagem Java
No. verifique o arquivo no próximo arranque, se possível.
Outras dicas
notas Como Tim Bender, File.deleteOnExit()
não garante que o arquivo realmente é excluído.
Sistemas On Unixish (como Linux ou OSX), no entanto, é possível excluir o arquivo temporário antes escrevendo para ele (mas após abri-lo). Contanto que você mantenha um descritor aberto para o arquivo, você pode manter leitura e gravação a ele muito bem, mesmo que o arquivo não existe mais na árvore de diretórios, eo sistema operacional irá recuperar automaticamente o espaço usado pelo arquivo quando o seu saídas de programa (ou fecha o último descritor de arquivo).
Isso não vai funcionar no Windows, que tem diferentes semântica do sistema de arquivos e não permite abrir arquivos a ser excluído. No entanto, em código portátil, você pode simplesmente tentar apagar o arquivo após abri-lo e, se isso não suceder, voltar a cair deleteOnExit()
:
File tempFile = File.createTempFile("tempfile", ".tmp");
RandomAccessFile fh = new RandomAccessFile (tempFile, "rw");
// try to delete the file now, fall back to deletion on exit
if ( !tempFile.delete() ) tempFile.deleteOnExit();
Note que, aparentemente, File.deleteOnExit()
não é muito confiável no Windows. Assim, sempre que possível, você deve ainda tentar fechar manualmente e apagar seus arquivos temporários quando você está feito com eles. Para mais detalhes, consulte esta resposta eu escrevi a outra pergunta .