2012-05-24 41 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