【问题标题】:Extracting a Zip file in App's Internal Storage - Android? [closed]在应用程序的内部存储中提取 Zip 文件 - Android? [关闭]
【发布时间】:2014-01-11 10:58:37
【问题描述】:

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

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

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

【问题讨论】:

  • stackoverflow.com/questions/7485114/…。看看这个是否有帮助
  • 似乎是个坏主意。为什么要将东西保存为 zip,最终您的应用可能会占用比所需空间多两倍的空间。
  • 其实我会在解压后删除这个zip。而且我不希望用户将解压缩的大数据下载到安卓设备。
  • @Raghunandan 谢谢。让我看看它是否有效。
  • 检查接受的答案:stackoverflow.com/questions/9324103/…

标签: java android storage unzip


【解决方案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 中授予 写入外部存储 权限

【讨论】:

  • 我已经在使用这个代码了。
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
相关资源
最近更新 更多