使用Java解压缩多部分zip文件卷

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

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

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

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

谢谢。

0
额外 编辑
意见: 1
zip文件如何分解成多个部分?
额外 作者 Puce,
我尝试了似乎有很多功能的chilkat,但它不支持多文件档案。即使在待办事项列表中也没有。
额外 作者 awm,
额外 作者 Emmanuel Bourg,

1 答案

尝试将所有文​​件连接成单个文件,然后提取单个文件。就像是:

    File dir = new File("D:/arc");
    FileOutputStream fos = new FileOutputStream(new File(
            "d:/arc/archieve-full.zip"));
    FileInputStream fis = null;
        Set files = new TreeSet();
        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()不保证字母顺序。

0
额外
如果您使用Java SE 7,我推荐使用ARM(try(...){}),而不是手动关闭流。
额外 作者 Puce,
虽然不完全一样的代码,但我确实尝试过,并且破译了。连锁似乎打破了拉链。我“认为”每个文件都有自己的头文件,以便系统知道哪些文件不应该是流的一部分。
额外 作者 awm,
@awm我试着用7zip压缩一个zip文件,它工作正常。确保您使用的文件夹仅包含zip文件。文件的顺序有问题,但我在此更新中修复了它。
额外 作者 tibtof,