通过 Junrar 提取 rar 文件,然后删除存档
Extract rar file through Junrar and then delete the archive
我正在使用 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));
但我收到 false 或一个异常,因为另一个进程使用了文件。
有人对这个图书馆有同样的问题吗?我可以通过其他方式删除文件吗?谢谢
这里确认了这个问题:
https://github.com/edmund-wagner/junrar/issues/28
ExtractArchive.extractArchive(...)
中的代码存在缺陷,因为它在内部创建了一个 Archive
实例,但它从不调用 close()
来释放它的资源和文件句柄。
在 Windows 上,这会导致锁定的文件无法删除,除非 JVM 结束或垃圾收集器收集了该存档的所有对象实例并因此释放了文件句柄。
在 Windows 上没有其他方法可以删除文件!
我正在使用 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));
但我收到 false 或一个异常,因为另一个进程使用了文件。 有人对这个图书馆有同样的问题吗?我可以通过其他方式删除文件吗?谢谢
这里确认了这个问题: https://github.com/edmund-wagner/junrar/issues/28
ExtractArchive.extractArchive(...)
中的代码存在缺陷,因为它在内部创建了一个 Archive
实例,但它从不调用 close()
来释放它的资源和文件句柄。
在 Windows 上,这会导致锁定的文件无法删除,除非 JVM 结束或垃圾收集器收集了该存档的所有对象实例并因此释放了文件句柄。
在 Windows 上没有其他方法可以删除文件!