如何处理包含具有空文件名的文件的 zip 文件

Posted

技术标签:

【中文标题】如何处理包含具有空文件名的文件的 zip 文件【英文标题】:How to handle zip files that contain files with empty filenames 【发布时间】:2013-07-04 20:37:12 【问题描述】:

我正在使用java.util.zip 来提取 zip 文件,但是当我在特定的 zip 文件上运行它时,我得到了

java.util.zip.ZipException: error in opening zip file

接下来,我使用 Windows 资源管理器打开 zip 文件,但它什么也没看到。如果我使用 Windows 内置的提取实用程序,它会说 zip 文件无效。

我使用 7zip 解压它,它运行良好,所以我打开它并注意到:有一个没有文件名的文件夹。

我不知道如何打开这个 zip 文件。我什至不知道你可以有没有字符的文件名,或者有以这种方式编写的应用程序考虑到这一点......

我可以尝试哪些解决方案?

我想到的一个解决方案是只执行 7zip 并让它处理文件,因为它无论如何都可以工作,但是我必须将 7zip 文件包含在应用程序中,因为最终用户的机器上可能没有 7zip。

【问题讨论】:

看起来名字只是空格。您为什么要为这种特殊情况找到令人讨厌的解决方案? 【参考方案1】:

Windows 不允许空文件夹名称或仅包含空格的文件夹名称,而 7zip 将允许您在 zip 中创建文件夹名称仅包含空格的文件夹。

您需要检查 ZipEntry 返回的文件名中的空字符串。

private static String fixFileName(String filename)

    String[] sArray = filename.split("\\s+");
    String retval = "";
    for (String s : sArray)
    
        if (s.trim().equals(""))
        
            s = String.valueOf(System.currentTimeMillis());
        
        retval += s;
    

    return retval;

【讨论】:

以上是关于如何处理包含具有空文件名的文件的 zip 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中,如何处理具有多个线程/任务但有条件的大型文本文件?

如何处理带空格的文件名?

如何处理压缩文件夹中的 CSV 文件?

你如何处理大量的小文件?

Boost:如何处理其嵌套的包含文件?

如何处理具有多个 tsconfig.json 文件的项目?