使用 zip4j 在 Windows 中提取 zip 文件时可以跳过符号链接吗?

Can I skip symbolic links when extracting a zipfile in Windows using zip4j?

我正在使用 zip4j 库提取一个 zip 文件,其中包含 Windows.

下的符号 links

我的代码如下:

final String path = App.class.getResource("/file.zip").getPath();
final ZipFile zipFile = new ZipFile(path);
final Path tempDirectory = Files.createTempDirectory("tmp");
zipFile.extractAll(tempDirectory.toString());

(可在 https://github.com/maikelsteneker/zip4j-symlink 获得最小工作示例)

此 zip 文件包含一个符号 link。创建此类符号 link 需要 Windows 中的管理员权限。结果,出现以下异常:

Exception in thread "main" net.lingala.zip4j.exception.ZipException: java.nio.file.FileSystemException: C:\Users\Maikel\AppData\Local\Temp\tmp10742489646321434610\symlink.txt: A required privilege is not held by the client.

        at net.lingala.zip4j.tasks.AsyncZipTask.performTaskWithErrorHandling(AsyncZipTask.java:53)
        at net.lingala.zip4j.tasks.AsyncZipTask.execute(AsyncZipTask.java:40)
        at net.lingala.zip4j.ZipFile.extractAll(ZipFile.java:436)
        at zip4j.symlink.App.main(App.java:17)
Caused by: java.nio.file.FileSystemException: C:\Users\Maikel\AppData\Local\Temp\tmp10742489646321434610\symlink.txt: A required privilege is not held by the client.

        at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at java.base/sun.nio.fs.WindowsFileSystemProvider.createSymbolicLink(WindowsFileSystemProvider.java:585)
        at java.base/java.nio.file.Files.createSymbolicLink(Files.java:1058)
        at net.lingala.zip4j.tasks.AbstractExtractFileTask.createSymLink(AbstractExtractFileTask.java:108)
        at net.lingala.zip4j.tasks.AbstractExtractFileTask.extractFile(AbstractExtractFileTask.java:61)
        at net.lingala.zip4j.tasks.ExtractAllFilesTask.executeTask(ExtractAllFilesTask.java:38)
        at net.lingala.zip4j.tasks.ExtractAllFilesTask.executeTask(ExtractAllFilesTask.java:16)
        at net.lingala.zip4j.tasks.AsyncZipTask.performTaskWithErrorHandling(AsyncZipTask.java:46)
        ... 3 more

有没有办法跳过这些符号 links 以避免这种异常? 理想情况下,只有当这些权利是不可用(某些用户可能具有管理员权限或以其他方式将其系统配置为允许创建符号 links)。我正在寻找一个优雅的解决方案;我不想在图书馆附近工作。

该库目前似乎不支持此类功能。我建议提交 bug/feature request。您可以建议一个允许忽略某些错误的自定义错误处理程序,或者可能是一个允许选择要即时提取哪些文件的自定义过滤器。