Android解压缩不是目录问题

时间:2013-01-18 11:24:16

标签: java android

我正在尝试解压缩存储在raw文件夹中的zip文件。代码如下

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();
}

但我一直收到这个错误

  

01-18 11:24:28.301:W / System.err(2285):java.io.FileNotFoundException:   /data/data/com.example.ziptests/files/imageFolder/TestImages/background.png   (不是目录)

我完全不知道它为什么导致这个,它找到了文件,但是当它们写出来时,它会带来错误。最初我发现一个问题是由于在Mac上压缩了zip文件引起的,所以我在我的Windows机器上压缩了文件,解决了一个问题(当你在mac上压缩时,它会添加这些额外的文件夹和文件这样的s store.ds在尝试解压缩时导致错误),但这不是一个目录错误不断出现。

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

您无法将文件写入raw文件夹。它是一个只读目录,旨在包含apk中包含的资源文件。


UPDATE
该文件在assets目录中会更好。您可以通过AssetManager访问它。如果没有,请将其保留在res/raw目录中,但可以通过Resources.openRawResource访问它。无论哪种方式,它们都是只读的。