Извлеките 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 нет другого способа удалить файл!