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

Java 打开zip文件时出错:打开大于2GB的大zip文件,java,android,Java,Android,当我尝试创建java.util.zip.ZipFile时,我在打开zip文件时得到一个java.util.zip.ZipException:错误。只有当我尝试打开大于2GB的大ZipFile时,才会发生此异常。有没有打开大zip文件的技巧 后来我需要从这个zip文件中提取单个文件,我怀疑ZipInputStream是否足够快来提取所需的文件,因为我需要运行所有文件 这是我的StackTrace: Caused by: java.util.zip.ZipException: error in op

当我尝试创建java.util.zip.ZipFile时,我在打开zip文件时得到一个java.util.zip.ZipException:错误。只有当我尝试打开大于2GB的大ZipFile时,才会发生此异常。有没有打开大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测试打开,它也可以运行,因为JUnit测试在本地桌面计算机上运行,而不是在Android设备上运行。然而,我无法让它在android设备上工作。我想原因是android文件系统。

需要记住的关键点是,特别是如果您正在处理大型zip归档文件,Java 6只支持高达2GB的zip文件

Java7支持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();
    }

我需要启用zip64模式吗?这是如何实现的?可能重复。请参阅:[