Извлеките rar файл через Junrar и затем удалите архив

Я использую junrar, но у меня есть проблема, чтобы удалить архив после извлечения. Это код:

ExtractArchive extractArchive = new ExtractArchive();  
extractArchive.extractArchive(new File(archiveFilePath), new File(destDirectory));

после этого кода я не могу удалить файл, связанный с archiveFilePath. Я пробовал оба new File(archiveFilePath).delete(); а также apache commons io

FileDeleteStrategy.FORCE.delete(new File(archiveFilePath));

но я получаю ложное или одно исключение, потому что файл используется из другого процесса. У кого-то была такая же проблема с этой библиотекой? Можно ли удалить файл другими способами? Спасибо

Здесь есть подтверждение проблемы: https://github.com/edmund-wagner/junrar/issues/28

1 ответ

Решение

Код в ExtractArchive.extractArchive(...) является дефектом, поскольку он создает внутренне Archive экземпляр, но он никогда не вызывает close() освободить его ресурсы и файловые дескрипторы.

В Windows это приводит к заблокированному файлу, который нельзя удалить, пока JVM не завершится или сборщик мусора не соберет все экземпляры объектов этого архива и, следовательно, не освободит дескрипторы файлов.

В Windows нет другого способа удалить файл!

Другие вопросы по тегам