Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在App'中提取Zip文件;安卓的内部存储?_Java_Android_Storage_Unzip - Fatal编程技术网

Java 在App'中提取Zip文件;安卓的内部存储?

Java 在App'中提取Zip文件;安卓的内部存储?,java,android,storage,unzip,Java,Android,Storage,Unzip,我不想把这么多文件从安卓assets目录复制到我的应用程序的内部存储器,这会增加开销。这就是为什么我在assets文件夹中创建了一个zip文件,我会将该zip文件复制到android应用程序的内部存储中。复制后,我将在同一位置提取/解压缩它,提取完成后,我将删除此zip文件 这个想法是为了消除复制这么多文件的开销。同时,在复制这么多文件时,我会得到一些文件类型的IOException。这又是一个阻碍。这就是为什么我正试图这样做,正如我上面所讨论的那样但问题是如何提取驻留在应用程序内部存储中的zi

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

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


感谢您的帮助或代码

您可以使用以下代码从中提取zip文件:


在AndroidManifest.xml中授予写入外部存储的权限。如果这是个坏主意,请检查此选项。你为什么要将东西保存为zip文件,最终你的应用程序占用的空间可能是所需空间的两倍。事实上,我会在解压缩后删除此zip文件。我不希望用户将解压后的大数据下载到android设备上。@Raghunandan谢谢。让我检查一下它是否有效。检查接受的答案:我已经在使用这个代码了。
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();
        }
    }
}