【问题标题】:Unzipping a multi-part zip file volumes using Java使用 Java 解压缩多部分 zip 文件卷
【发布时间】:2012-05-31 05:51:58
【问题描述】:

我需要解压缩一组 zip 存档文件。这不是一组 zip 文件,这是一个大 zip 文件,已根据大小要求分成多个 zip 文件。

例如,如果您有一个 2.5MB 的 zip 文件,而您的邮件系统只支持 1MB 的文件,您可以要求 Zip 创建最多 1MB 的 3 个文件。

因此它创建了 a.zip.001、a.zip.002、a.zip.003 ... 不同的库对它们的命名不同,但本质上它们都以相同的方式工作。

你如何在java中解压这个?看起来 std 中的压缩库不支持这个。

谢谢。

【问题讨论】:

  • 我试过 chilkat,它似乎有很多功能,但它不支持多文件存档。此时甚至不在待办事项列表中。
  • zip 文件是如何分成几部分的?

标签: java archive unzip compression


【解决方案1】:

尝试将所有文​​件连接成一个文件,然后提取单个文件。比如:

    File dir = new File("D:/arc");
    FileOutputStream fos = new FileOutputStream(new File(
            "d:/arc/archieve-full.zip"));
    FileInputStream fis = null;
        Set<String> files = new TreeSet<String>();
        for (String fname : dir.list()) {
            files.add(fname);
        }
        for (String fname : files) {
        try {
            fis = new FileInputStream(new File(dir.getAbsolutePath(), fname));
            byte[] b = new byte[fis.available()];
            fis.read(b);
            fos.write(b);
        } finally {
            if (fis != null) {
                fis.close();
            }
            fos.flush();
        }
    }
    fos.close();
    ZipFile zipFile = new ZipFile("d:/arc/archieve-full.zip");
    /*extract files from zip*/

更新:使用TreeSet 对文件名进行排序,因为dir.list() 不保证字母顺序。

【讨论】:

  • 如果您使用的是 Java SE 7,我建议使用 ARM (try(...){}) 而不是手动关闭流。
  • 虽然代码不完全相同,但我确实尝试过,但它坏了。连接似乎打破了拉链。我“认为”每个文件都有自己的标题,以便系统知道它是哪个部分编号,不应该是流的一部分。
  • @awm 我尝试使用 7zip 压缩的 zip 文件,效果很好。确保您使用的文件夹仅包含 zip 文件。文件的顺序有问题,但我在这次更新中修复了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
相关资源
最近更新 更多