2016-03-23 81 views
0

我的UnZip類不解壓整個文件。這個類是從另一個活動中調用的。我的zip文件保存在手機內部存儲器的主目錄中。該zip文件包含文件夾和一些視頻。 這個unzip有什麼問題? 什麼和如何從zip解壓縮和解壓縮文件是相同的意思?解壓縮時出錯

感謝您的幫助!

public class Unzip { 
    private static final String INPUT_ZIP_FILE = "sdcard/downloaded_issue.zip"; 
    private static final String OUTPUT_FOLDER = "sdcard/Atlantis/"; 

    public static void main() 
    { 
    Unzip unZip = new Unzip(); 
    unZip.unZipIt(INPUT_ZIP_FILE, OUTPUT_FOLDER); 
    } 

/** 
* Unzip it 
* @param zipFile input zip file 
* @param outputFolder zip file output folder 
*/ 
public void unZipIt(String zipFile, String outputFolder){ 
    byte[] buffer = new byte[1024]; 
    try{ 

     //create output directory is not exists 
     File folder = new File(OUTPUT_FOLDER); 
     if(!folder.exists()){ 
      folder.mkdir(); 
     } 

     //get the zip file content 
     ZipInputStream zis = 
       new ZipInputStream(new FileInputStream(zipFile)); 
     //get the zipped file list entry 
     ZipEntry ze = zis.getNextEntry(); 

     while(ze!=null){ 

      String fileName = ze.getName(); 
      File newFile = new File(outputFolder + File.separator + fileName); 

      System.out.println("file unzip : "+ newFile.getAbsoluteFile()); 

      //create all non exists folders 
      //else you will hit FileNotFoundException for compressed folder 
      new File(newFile.getParent()).mkdirs(); 

      FileOutputStream fos = new FileOutputStream(newFile); 

      int len; 
      while ((len = zis.read(buffer)) > 0) { 
       fos.write(buffer, 0, len); 
      } 

      fos.close(); 
      if (ze.isDirectory()) { 
      ze = zis.getNextEntry(); 
      } 
     } 

     zis.closeEntry(); 
     zis.close(); 

     System.out.println("Done"); 

    }catch(IOException ex){ 
     ex.printStackTrace(); 
    } 
    } 
} 
+0

的編程語言是這樣嗎?乍看起來像是Java或C#。 – Nyerguds

+0

這是Java。我正在使用Android Studio進行編程 – Weblu

+0

然後將其標記爲。如果包含編程語言,你會得到更快的響應;人們往往會對此進行過濾。 – Nyerguds

回答

0

我認爲你的'while'循環被破壞;如果下一個條目是一個目錄,那麼您只會獲取下一個條目,而我假設您可能正在嘗試跳過的目錄。

無論如何,由於您爲遇到的所有文件創建了文件夾,因此您可以跳過文件夾條目並寫入文件條目。唯一的例外是創建空文件夾。

更換while循環通過此代碼應工作:

while(ze!=null){ 
     String fileName = ze.getName(); 
     File newFile = new File(outputFolder + File.separator + fileName); 
     System.out.println("file unzip : "+ newFile.getAbsoluteFile()); 
     //create all non exists folders 
     //else you will hit FileNotFoundException for compressed folder 
     if (ze.isDirectory()) { 
      // create the folder 
      newFile.mkdirs(); 
     } 
     else { 
      // create the parent folder and write to disk 
      new File(newFile.getParent()).mkdirs(); 
      FileOutputStream fos = new FileOutputStream(newFile); 
      int len; 
      while ((len = zis.read(buffer)) > 0) { 
       fos.write(buffer, 0, len); 
      } 
      fos.close(); 
     } 
     // get the next item 
     ze = zis.getNextEntry(); 
    } 
+0

我需要提取所有文件夾。不要跳過它們。 – Weblu

+0

那麼你顯然需要更多的代碼。 – Nyerguds

+0

不,等一下。這不是遞歸的,除非文件夾爲空,否則文件夾條目自身沒有任何價值,因爲您自動爲文件自動創建文件夾。你可以做的最好的是創建它們,然後跳過它們,是的。 – Nyerguds