2016-11-24 22 views
2

嗨,當我試圖解壓縮我的文件,我使用下面的代碼片斷getNextZipEntry爲什麼跳過幾個文件的根目錄?

public static List<String> unZip(File tarFile) throws IOException { 
    List<String> result = new ArrayList<String>(); 
    InputStream inputStream = new FileInputStream(tarFile); 
    ZipArchiveInputStream in = new ZipArchiveInputStream(inputStream); 
    ZipArchiveEntry entry = in.getNextZipEntry(); 
    while (entry != null) { 
     System.out.println("Entry name ::: "+entry); 
     if (entry.isDirectory()) { 
      System.out.println("This entry is a directory "); 
      entry = in.getNextZipEntry(); 
      continue; 
     } 
     result.add(entry.getName()); 
     entry = in.getNextZipEntry(); 
    } 
    in.close(); 
    return result; 
} 

我上面的代碼輸出爲

Entry name ::: lib/docssdk.jar 
Entry name ::: lib/jackson-annotations-2.7.4.jar 
Entry name ::: lib/jackson-core-2.7.4.jar 
Entry name ::: lib/jackson-databind-2.7.4.jar 
Entry name ::: lib/jsonapi-converter-0.3.jar 
Entry name ::: lib/okhttp-3.0.1.jar 
Entry name ::: lib/okio-1.7.0.jar 
Entry name ::: lib/retrofit-2.0.2.jar 

我期待它是作爲

Entry name ::: lib/ 
Entry name ::: lib/docssdk.jar 
Entry name ::: lib/jackson-annotations-2.7.4.jar 
Entry name ::: lib/jackson-core-2.7.4.jar 
Entry name ::: lib/jackson-databind-2.7.4.jar 
Entry name ::: lib/jsonapi-converter-0.3.jar 
Entry name ::: lib/okhttp-3.0.1.jar 
Entry name ::: lib/okio-1.7.0.jar 
Entry name ::: lib/retrofit-2.0.2.jar 

根文件夾lib /缺失

我得到預期的OU ut當我解壓縮我的機器中的文件內容並在lib文件夾中再次創建一個zip文件時。

爲什麼我在找到getNextZipEntry時錯過了我的根文件夾?請在這方面給我建議。

我重視的zip結構的screenshot隨着這個

Original Zip File重現此問題

回答

4

你看不到lib/項,因爲它不會在你的zip文件存在:

$ zipinfo zip_root_folder_issue.zip 
Archive: zip_root_folder_issue.zip 
Zip file size: 1878250 bytes, number of entries: 8 
-rw-r--r-- 3.0 unx 17596 bx defN 16-Aug-02 13:38 lib/docssdk.jar 
-rw-r--r-- 3.0 unx 50897 bx defN 16-Aug-02 13:40 lib/jackson-annotations-2.7.4.jar 
-rw-r--r-- 3.0 unx 253001 bx defN 16-Aug-02 13:39 lib/jackson-core-2.7.4.jar 
-rw-r--r-- 3.0 unx 1204187 bx defN 16-Aug-02 13:39 lib/jackson-databind-2.7.4.jar 
-rw-r--r-- 3.0 unx 36004 bx defN 16-Aug-02 13:39 lib/jsonapi-converter-0.3.jar 
-rw-r--r-- 3.0 unx 326467 bx defN 16-Aug-02 13:39 lib/okhttp-3.0.1.jar 
-rw-r--r-- 3.0 unx 69868 bx defN 16-Aug-02 13:38 lib/okio-1.7.0.jar 
-rw-r--r-- 3.0 unx 86225 bx defN 16-Aug-02 13:38 lib/retrofit-2.0.2.jar 
8 files, 2044245 bytes uncompressed, 1876818 bytes compressed: 8.2% 

存檔經理很可能顯示中介「失蹤」的文件夾,但一個zip文件,並不需要接受報名他們。一些使用zip格式的文件格式(例如xlsx)甚至預計都沒有。

就你而言,我認爲你需要做這些管理者的工作:如果文件夾不存在,則顯示/創建文件夾。

2

@subramanian rasapan,如果你只希望提取的zip文件,然後我可以建議第三方工具爲解決上述問題提供了最簡單的提取方法。

該工具的名稱是Zip4J:www.lingala.net/zip4j/download.php

只需將其添加到庫中,你可以使用下面的代碼提取:

public void unZipFile(String filePath) 
    { 
     String destination = "<desired-destination>"; 
     try 
     { 
      String zipFileName = new File(filePath).getName(); 
      ZipFile zipFile = new ZipFile(filePath); 
      zipFile.extractAll(destination); 
     } 
     catch (ZipException e) 
     { 
     } 
    } 

對於上面的代碼工作,你需要以下進口:

import net.lingala.zip4j.core.ZipFile; 
import net.lingala.zip4j.exception.ZipException; 

我提供了一個測試程序,以解壓縮任何壓縮文件:

package unzip; 

import java.io.File; 
import net.lingala.zip4j.core.ZipFile; 
import net.lingala.zip4j.exception.ZipException; 


public class Unzip 
{ 
    public static void main(String[] args) 
    { 
     String fileName = "abc.zip"; 
     String destination = "D:\\copiedTo"; 
     try 
     { 
      String zipFileName = new File(fileName).getName(); 
      ZipFile zipFile = new ZipFile(fileName); 
      zipFile.extractAll(destination+"\\"+zipFileName); 
     } 
     catch (ZipException e) 
     { 
     } 
    } 
} 

從Zip文件中提取的文件將被保存到d:\ copiedto \\。

我的拉鍊結構:

 
abc.zip (zip file) 
|_abc 
    |_1.txt 
    |_2.txt 
    |_3.txt 
    |_4.txt 
    |_5.txt 
    |_6.txt 

當提取出的文件夾是作爲壓縮文件的結構相同的結構(連同根文件夾)。

我附上我有請測試文件的鏈接,如果有必要檢查他們:

Zip文件:https://drive.google.com/file/d/0B4fTzD5zwqL0M1lqM3EwazVzWUE/view?usp=sharing 提取的文件:https://drive.google.com/open?id=0B4fTzD5zwqL0T0xVaXhmSzZ6VWc

請檢查並告訴我們,如果有任何混淆。 感謝和問候。

+0

我想提取之前預覽我的zip文件。爲此我想提取zip文件中的確切文件夾結構。 – lsof

相關問題