Удаление файла Java и System.gc () - PullRequest
       48

Удаление файла Java и System.gc ()

2 голосов
/ 22 февраля 2012

В моем приложении я пишу файл для хранения некоторой информации о выполнении, и как только выполнение будет завершено, я хочу удалить временный файл. Проблема в том, что даже после закрытия файла или очистки потоков я не могу удалить файл. Я пытался

Thread.sleep(1000);
file.delete();

и файл тоже не удалялся. Затем я создал цикл while

while(!file.delete())
   Thread.sleep(1000);

и это было бесконечно. Затем я добавил

System.gc();
file.delete();

и все заработало !!!

Я подтвердил, что я изящно закрыл или сбросил файл. Я хочу знать, почему мой код работал с System.gc()?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Это указывает на то, что вы не вызывали close().

Причина: во время начала Java, метод Object.finalize() использовался для очистки сборки мусора.и для операций ввода-вывода он сделал close().

Пока файл не используется (не закрыт), его нельзя удалить в Windows.

0 голосов
/ 22 февраля 2012

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

Также вы всегда должны вызывать .close(), чтобы убедиться, что все данныесбрасывается в файл, и ручку можно правильно очистить.

...