打开zip文件时出错:打开大于2GB的大zip文件

时间:2018-11-07 09:40:01

标签: java android

当我尝试创建java.util.zip.ZipFile时,我得到了java.util.zip.ZipException: error in opening zip file。仅当我尝试打开较大的ZipFile(> 2GB)时,才会发生此异常。打开大的zip文件有技巧吗?

稍后,我需要从该zip中提取单个文件,并且我怀疑ZipInputStream的速度是否足以提取所需文件,因为我需要运行所有文件。

这是我的StackTrace:

Caused by: java.util.zip.ZipException: error in opening zip file
   at java.util.zip.ZipFile.open(Native Method)
   at java.util.zip.ZipFile.<init>(ZipFile.java:225)
   at java.util.zip.ZipFile.<init>(ZipFile.java:148)
   at java.util.zip.ZipFile.<init>(ZipFile.java:162)

更新: 我发现它可以在我的台式计算机上运行,​​并且如果我在Android Studio中将ZipFile作为JUnit-Test打开也可以运行(因为JUnit-Tests在本地台式计算机上运行,​​而不是在android设备上运行)。但是我可以让它在android设备上工作。我想原因是android文件系统。

1 个答案:

答案 0 :(得分:1)

要记住的要点是,特别是在处理大型zip归档文件时,Java 6仅支持最大2GB的zip文件。

Java 7支持zip64模式,可用于处理大小超过2GB的大型zip文件

对于大文件也使用流是个好主意:

private static void readUsingZipInputStream() throws IOException {
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(FILE_NAME));
    final ZipInputStream is = new ZipInputStream(bis);

    try {
        ZipEntry entry;
        while ((entry = is.getNextEntry()) != null) {
            System.out.printf("File: %s Size %d  Modified on %TD %n", entry.getName(), entry.getSize(), new Date(entry.getTime()));
            extractEntry(entry, is);
        }
    } finally {
        is.close();
    }