在App的内部存储中提取Zip文件 - Android?

时间:2014-01-11 10:58:37

标签: java android storage unzip

我不希望将这么多文件从android assets目录复制到我的 app的内部存储。这就是为什么我在zip文件夹中创建了一个assets文件,我会将zip文件复制到我的 android应用程序的内部存储器中。复制之后,我在同一位置提取/解压缩,提取完成后,我将删除此zip文件。

这样做的目的是消除复制这么多文件的开销。另外,在复制这么多文件时,我得到IOException一些文件类型。这又是一种阻碍。这就是为什么我试图这样做,正如我上面所讨论的那样。 但问题是我如何提取驻留在应用内部存储中的zip文件。我想在同一个位置(App的内部存储)中提取它。我怎样才能做到这一点?

感谢任何帮助或代码.. !!!

1 个答案:

答案 0 :(得分:1)

您可以使用此source

中的代码提取zip文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import android.util.Log;

public class UnzipUtil
{
    private String zipFile;
    private String location;

    public UnzipUtil(String zipFile, String location)
    {
        this.zipFile = zipFile;
        this.location = location;

        dirChecker("");
    }

    public void unzip()
    {
        try
        {
            FileInputStream fin = new FileInputStream(zipFile);
            ZipInputStream zin = new ZipInputStream(fin);
            ZipEntry ze = null;
            while ((ze = zin.getNextEntry()) != null)
            {
                Log.v("Decompress", "Unzipping " + ze.getName());

                if(ze.isDirectory())
                {
                    dirChecker(ze.getName());
                }
                else
                {
                    FileOutputStream fout = 
                        new FileOutputStream(location + ze.getName());

                    byte[] buffer = new byte[8192];
                    int len;
                    while ((len = zin.read(buffer)) != -1)
                    {
                        fout.write(buffer, 0, len);
                    }
                    fout.close();

                    zin.closeEntry();

                }

            }
            zin.close();
        }
        catch(Exception e)
        {
            Log.e("Decompress", "unzip", e);
        }

    }

    private void dirChecker(String dir)
    {
        File f = new File(location + dir);
        if(!f.isDirectory())
        {
            f.mkdirs();
        }
    }
}

在AndroidManifest.xml中提供写入外部存储空间权限