Убедитесь, что файл удаляется при выходе из JVM - PullRequest
6 голосов
/ 15 сентября 2009

Гарантирует ли File.deleteOnExit (), что файл удален, даже если JVM преждевременно уничтожена?

Ответы [ 2 ]

6 голосов
/ 22 мая 2013

Как отмечает Тим ​​Бендер, File.deleteOnExit() не гарантирует, что файл действительно будет удален.

В системах Unixish (таких как Linux или OSX), однако, можно удалить временный файл перед записью в него (но после его открытия). Пока вы сохраняете открытый дескриптор файла, вы можете продолжать чтение и запись в него без проблем, даже если файл больше не существует в дереве каталогов, и ОС автоматически освободит пространство, используемое файлом, когда Программа завершает работу (или закрывает последний дескриптор файла).

Это не будет работать в Windows, которая имеет другую семантику файловой системы и не позволяет удалять открытые файлы. Однако в переносимом коде вы можете просто попытаться удалить файл после его открытия и, если это не удастся, вернуться к 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();

Обратите внимание, что, очевидно, File.deleteOnExit() не очень надежен в Windows. Таким образом, когда это возможно, вы все равно должны пытаться вручную закрывать и удалять временные файлы, когда вы закончите с ними. Подробнее см. этот ответ, который я написал на другой вопрос .

5 голосов
/ 15 сентября 2009

Удаление будет предприниматься только для обычного завершения виртуальной машины, как определено в Спецификации языка Java

Нет. проверьте файл при следующем запуске, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...