2013-01-18 65 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