2014-09-04 108 views
0

我想從壓縮文件解壓縮一些文件到壓縮文件具有相同文件結構的解壓縮目錄,但是getNextEntry()方法有困難。它似乎只返回壓縮文件中的文件,而不是當我嘗試在不存在的目錄中創建文件時導致FileNotFoundException的文件夾。解壓縮文件不檢索文件夾

例如我的zip文件的第一個層次是這樣的:

Folder 1 file2.txt Folder 2 Folder 3 file.txt

當我打電話getNextEntry()返回的第一件事就是file.txt,返回的第二件事是Folder 1/file2.txt。即使嵌套的文件夾也被忽略。這是以前的工作,但是,我不知道我做了什麼來打破它。

我傳入的文件是位於內部存儲器中的壓縮文件。任何幫助都感激不盡!

public boolean unZipAndEncrypt(File file) { 
    boolean isSuccess = false; 

    ZipInputStream zin = null; 
    try { 
     ZipFile zipFile = new ZipFile(file); 
     FileInputStream fin = new FileInputStream(file); 
     zin = new ZipInputStream(fin); 
     ZipEntry ze; 
     File contentDir = new File(bookDirectory, contentId); 
     while ((ze = zin.getNextEntry()) != null) { 
      String name = ze.getName(); 
      if (ze.isDirectory()) { 
       File dir = new File(contentDir, name); 
       dir.mkdirs(); 
       continue; 
      } 

      FileModel fileModel = new FileModel(zipFile.getInputStream(ze), name); 
      if (!ze.getName().contains("cp_index")) { 
       fileModel = encryptor.encrypt(fileModel); 
      } 
      File toWrite = new File(contentDir, fileModel.getFullPathName()); 
      toWrite.createNewFile(); 
      OutputStream fout = new FileOutputStream(toWrite); 
      try { 
       byte[] buffer = new byte[1024]; 
       int len = 0; 
       while ((len = fileModel.getInputStream().read(buffer)) != -1) { 
        fout.write(buffer, 0, len); 
       } 
      } finally { 
       fileModel.close(); 
       zin.closeEntry(); 
       fout.close(); 
      } 

     } 
     isSuccess = true; 
    } catch (FileNotFoundException e) { 
     Log.e(TAG, "", e); 
    } catch (IOException e) { 
     Log.e(TAG, "", e); 
    } finally { 
     file.delete(); 
     try { 
      zin.close(); 
     } catch (IOException e) { 
      Log.e(TAG, "", e); 
     } catch (NullPointerException e) { 
      Log.e(TAG, "", e); 
     } 
    } 
    return isSuccess; 
} 

回答

1

你可以創建新的文件之前創建的目錄:

toWrite.getParentFile().mkdirs(); // do before createNewFile() 
+0

現在我覺得自己像個白癡。不會承認我在那花了多少時間。謝謝您的幫助! – 2014-09-05 14:16:27