2014-09-11 43 views
0

我使用下面的代碼從Web的Java解壓 - 也不例外,但結果是空

File dir = new File(dest.getAbsolutePath(), archiveName); 
    // create output directory if it doesn't exist 
    if (!dir.exists()) { 
     dir.mkdirs(); 
    } 
    System.err.println(pArchivePath); 
ZipFile zipFile = null; 
    try { 
     zipFile = new ZipFile(pArchivePath); 
     Enumeration<?> enu = zipFile.entries(); 
     while (enu.hasMoreElements()) { 
      ZipEntry zipEntry = (ZipEntry) enu.nextElement(); 

      String name = zipEntry.getName(); 
      long size = zipEntry.getSize(); 
      long compressedSize = zipEntry.getCompressedSize(); 
      System.out.printf("name: %-20s | size: %6d | compressed size: %6d\n", 
        name, size, compressedSize); 

      File file = new File(name); 
      if (name.endsWith("/")) { 
       System.err.println("make dir " + name); 
       file.mkdirs(); 
       continue; 
      } 

      File parent = file.getParentFile(); 
      if (parent != null) { 
       parent.mkdirs(); 
      } 

      InputStream is = zipFile.getInputStream(zipEntry); 
      FileOutputStream fos = new FileOutputStream(file); 
      byte[] bytes = new byte[1024]; 
      int length; 
      while ((length = is.read(bytes)) >= 0) { 
       fos.write(bytes, 0, length); 
      } 
      is.close(); 
      fos.close(); 

     } 
     zipFile.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (zipFile != null) { 
      try { 
       zipFile.close(); 
      } 
      catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 

解壓縮檔案。它的包裝與7zip的winrar或者作爲一個.zip文件,但改名爲.qtz(但我不事這會導致問題。) 所以,如果我運行代碼來解壓縮我的檔案一切正常:我上得到的輸出sysout/err列出所有文件,也不會發生異常,但是如果我查看目標目錄...它是空的 - 只存在根文件夾。

我也用

Runtime.getRuntime().exec(String.format("unzip %s -d %s", pArchivePath, dest.getPath())); 

但我不能再使用這種「產生新的進程開始,我繼續在Java代碼中解壓縮後要立即上的歸檔工作。

那麼問題是...爲什麼沒有這個和平的代碼工作的?有很多類似的例子,但沒有一個爲我工作。

BR,菲利普

編輯:下面的解決我的問題

File file = new File(dir.getParent(), name); 

所以我沒有針對該文件設置正確的父路徑。

回答

0

在你的代碼下面的片段:

 File parent = file.getParentFile(); 
     if (parent != null) { 
      parent.mkdirs(); 
     } 

哪裏此創建父目錄?因爲我試過你的代碼,它不是在目標目錄中創建的,而是在我的Eclipse項目目錄中創建的。看着你的代碼,目的地目錄無處可用,對吧?

的代碼實際上提取zip文件的內容,但不是我期待它。

+0

是的,這是一個很好的提示。問題是'父'採取'文件'的父路徑。所以我剛剛用新的File(dir.getParent(),name)初始化'file';現在它適用於我。 – PJWork 2014-09-11 14:14:35

+0

很酷。你能否將問題標記爲已回答? – prabugp 2014-09-11 14:18:41

0

我想是因爲我沒有看到你在做這樣的事情:

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath+ "Zip.zip")); 
out.putNextEntry(new ZipEntry("Results.csv")); 

我仍在努力,但我覺得現在的問題,因爲這使得文件的zip內

你也應該使用ZipOutputStream來寫;像

out.write(bytes, 0, length); 
相關問題