java - 如何处理包含空文件名文件的 zip 文件

标签 java unzip zip

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

java.util.zip.ZipException: 打开 zip 文件时出错

接下来,我使用 Windows 资源管理器打开 zip 文件,但它没有看到任何内容。如果我使用 Windows 内置的解压缩实用程序,它会说 zip 文件无效。

我使用 7zip 将其解压缩并且工作正常,所以我打开它并注意到:有一个没有文件名的文件夹。

img

img

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

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

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

最佳答案

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;
}

关于java - 如何处理包含空文件名文件的 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17477804/

相关文章:

java - 如果我添加/删除/更新可靠集合的元素, hibernate 会增加版本吗?

Java 8 LocalDateTime - 如何获取两个日期之间的所有时间

php - 解压缩用户提交文件的安全性

linux - Zip 文件未通过 crontab 提取

python - python 中的有效 zip 文件

c# - 如何减少提取文件所需的时间?

java - 可 ScrollView Eclipse 插件

java - 如何在远程 Linux 上启动应用程序并等待响应

multithreading - Delphi:Form的线程=“Canvas does not allow drawing”中的ZipForge被卡住

windows - 是否可以在 Windows XP 上使用 .BAT 命令解压缩 .ZIP 文件?