2012-05-24 39 views
4

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

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

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

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

谢谢。

+0

我尝试过似乎有很多功能的chilkat,但它不支持多文件档案。即使在待办事项列表中也没有。 – awm

+0

压缩文件如何分解成几部分? – Puce

+0

可能是重复的http://stackoverflow.com/questions/8116443/how-do-you-uncompress-a-split-volume-zip-in-java –

回答

2

尝试将所有文​​件连接成单个文件,然后提取单个文件。喜欢的东西:

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()不保证按字母顺序排列。

+0

如果您使用的是Java SE 7,我推荐使用ARM (尝试(...){})而不是手动关闭流。 – Puce

+0

虽然不完全一样的代码,但我确实尝试了这一点,但它破裂了。连锁似乎打破了拉链。我“认为”每个文件都有自己的头文件,以便系统知道哪些文件不应该是流的一部分。 – awm

+0

@awm我尝试使用7zip压缩的zip,它工作正常。确保您使用的文件夹仅包含zip文件。文件的顺序有问题,但我在此更新中修复了它。 – tibtof