java - 在 Windows 中使用 zip4j 提取 zipfile 时可以跳过符号链接吗?
问题描述
我正在使用zip4j库在 Windows 下提取包含符号链接的 zip 文件。
我的代码如下:
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 文件包含一个符号链接。创建此类符号链接需要 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
有没有办法跳过这些符号链接以避免这种异常?理想情况下,我只想在这些权限不可用时跳过它们(某些用户可能具有管理员权限或以其他方式配置他们的系统以允许创建符号链接)。我正在寻找一个优雅的解决方案;我不想在图书馆附近工作。
解决方案
该库目前似乎不支持此类功能。我建议提交错误/功能请求。您可以建议一个允许忽略某些错误的自定义错误处理程序,或者可能是一个允许选择即时提取哪些文件的自定义过滤器。
推荐阅读
- reactjs - 尝试导入错误:“地图”未从“react-leaflet”导出(导入为“LeafletMap”)帮助我该怎么办
- git - git checkout 分支后如何解决 Permission denied 错误?
- python - 从子进程调用的外部 python 脚本打印 tqdm 进度条
- android - 应用程序关闭时警报不响(Android Studio)
- html - 带有 mailto 操作的 HTML 表单中显示为乱码的希伯来字符
- r - 具有不同键数的数据集上的 inner_join
- javascript - 分配给常量变量时出错
- python - 可以从单个文件可执行文件中提取python源代码吗
- javascript - OR opertaor 2 次或更多次的简化版本是什么?
- c# - 在 PdfSharp 中写入和读取 CustomValues 花费的时间太长