java - 打开 zip 文件时出错 : Opening of big zip files >2GB

标签 java android

当我尝试创建 java.util.zip.ZipFile 时,出现 java.util.zip.ZipException: 打开 zip 文件时出错。仅当我尝试打开大型 ZipFile (> 2GB) 时才会发生此异常。有没有打开大 zip 文件的技巧?

后来我需要从此 zip 中提取单个文件,并且我怀疑 ZipInputStream 是否足够快来提取所需的文件,因为我需要运行所有文件。

这是我的堆栈跟踪:

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文件系统的原因。

最佳答案

要记住的关键点是,Java 6 仅支持最大 2GB 的 zip 文件,尤其是在处理大型 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();
    }

关于java - 打开 zip 文件时出错 : Opening of big zip files >2GB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53186835/

相关文章:

java - Hibernate 反向一对多映射似乎无法正确处理从 Java 列表中删除项目

java - jboss Web应用程序正在部署但未找到

java - java和ntdll.dll之间的关系

android - 在 FirebaseRecyclerViewAdapter 中过滤

android - 为什么有些安卓手机没有安装 Google Play 服务?

android - Tesseract 变量 "save_blob_choices"是如何工作的?

Java pass 检查不起作用,条件有效

java - 多个线程作用于同一个对象

android - Android 应用程序中的 Google Plus key : What Key?

java - MaterialDatePicker android选择指定日期之前而不是指定日期