Pergunta

O File.deleteOnExit () garantia de que o arquivo é excluído, mesmo se a JVM é morto prematuramente?

Foi útil?

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 .

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