簡體   English   中英

使用 zip4j 在 Windows 中提取 zip 文件時,我可以跳過符號鏈接嗎?

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

我正在使用zip4j庫來提取 zip 文件,該文件包含 Windows 下的符號鏈接。

我的代碼如下:

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

有沒有辦法跳過這些符號鏈接以避免這種異常? 理想情況下,我只想在這些權限不可用時跳過它們(某些用戶可能具有管理員權限或以其他方式配置他們的系統以允許創建符號鏈接)。 我正在尋找一個優雅的解決方案; 我不想在圖書館附近工作。

該庫目前似乎不支持此類功能。 我建議提交錯誤/功能請求 您可以建議一個允許忽略某些錯誤的自定義錯誤處理程序,或者可能是一個允許選擇即時提取哪些文件的自定義過濾器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM