2013-01-18 61 views
1

我想解壓縮存儲在原始文件夾中的zip文件。代碼如下Android解壓縮不是目錄問題

try 
{ 
    File myDir = new File(getFilesDir().getAbsolutePath()); 
    File newFile = new File(myDir + "/imageFolder"); 

if(!newFile.exists()) 
        { 
         newFile.mkdir(); 
        } 

    ZipInputStream zipIs = new ZipInputStream(con 
      .getResources().openRawResource(R.raw.images)); 
    ZipEntry ze = null; 

    while ((ze = zipIs.getNextEntry()) != null) 
    { 

     Log.v("Name", ze.getName()); 
     Log.v("Size", "" + ze.getSize()); 

     if(ze.getSize() >0) 
     { 
      FileOutputStream fout = new FileOutputStream(newFile 
        + "/" + ze.getName());      

      byte[] buffer = new byte[1024]; 
      int length = 0; 

      while ((length = zipIs.read(buffer)) > 0) 
      { 
       fout.write(buffer, 0, length); 
      } 
      zipIs.closeEntry(); 
      fout.close(); 
     } 
     } 

    zipIs.close(); 

} catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

但我不斷收到此錯誤

11月1日至18日:24:28.301:W/System.err的(2285):java.io.FileNotFoundException: /數據/data/com.example.ziptests/files/imageFolder/TestImages/background.png (不是一個目錄)

我完全不知道爲什麼它是導致此,它找到的文件,但是當它涉及把它們寫出來,它會引起這個錯誤。最初我發現了一個問題,這是由於在Mac上壓縮zip文件引起的,所以我將文件壓縮到了我的Windows機器上,而不是這樣,這樣擺脫了一個問題(當您在Mac上壓縮時,它會添加這些額外的文件夾和文件這樣的s store.ds導致嘗試解壓縮時出錯),但這不是一個目錄錯誤不斷出現。

任何想法爲什麼會發生這種情況?

+0

壓縮文件使用winzip軟件壓縮? –

+0

是的,我把它壓縮在Windows上而不是在Mac上,因爲它在mac上的壓縮導致問題,因爲它增加了額外的文件夾,這是煩人的 – AdamM

+0

看到我的答案.... –

回答

1

請嘗試下面的鏈接代碼爲unzip壓縮文件。

代碼提取Zip文件

Unzip Zip File

的問題是我上傳未用winrar軟件製作ZIP文件,因此它是不妥當的提取,並給我的錯誤。

它會解決你的問題。

+0

好吧,我用瞭解壓縮代碼,並更新它採取inputstream,而不是其zip位置的字符串。然而,提取所有圖像需要花費一分多時間,並且在試圖解壓所有圖像時最終崩潰,只有42個小圖像。有什麼理由呢? – AdamM

0

無法將文件寫入raw文件夾。這是一個只讀目錄,旨在包含apk文件中包含的資源文件。


UPDATE
該文件將在assets目錄更好。您可以通過AssetManager訪問它。如果不是,請將其留在res/raw目錄中,但通過Resources.openRawResource訪問它。無論哪種方式,它們都是隻讀的。

+0

我沒有寫入原始文件夾,我只是從原始文件夾中讀取 – AdamM

+0

你說過「把它們寫出來......」。無論如何,將你的zip文件從res文件移動到'assets'文件夾,並獲取文件,因爲我即將發佈答案。 –

+0

但是,如果你看看我的代碼,我不會試圖寫出原始文件夾,只能從它讀取,然後寫出到手機上的內部存儲 – AdamM