阅读在你的Android资源文件夹从ZIP文件的文件(Reading files from a ZI

2019-06-26 11:31发布

我在读从被设在我的Android资产文件夹使用一个ZIP文件的文件ZipInputStream :它的工作原理,但它真的很慢,因为它有它使用顺序读取getNextEntry()并且有相当多的文件。

如果我的ZIP文件复制到SD卡上,阅读是非常快当使用ZipFile.getEntry ,但我没有找到一种方法,使用ZipFile与资产文件!

有什么办法来访问资源文件夹的ZIP以迅速的方式? 还是我真的有到ZIP复制到SD卡?

(顺便说一句,如果有人想知道为什么我这样做是:应用程序是大于50 MB,这样才能在Play商店我必须使用扩展的APK得到它;然而,这个应用程序还应该投入亚马逊应用商店,我必须使用另一个版本用于此,亚马逊不支持扩展的APK,自然...我想,在两个不同的位置访问的ZIP文件将处理这个简单的方法,但很可惜.. 。)

Answer 1:

这对我的作品:

private void loadzip(String folder, InputStream inputStream) throws IOException
{
    ZipInputStream zipIs = new ZipInputStream(inputStream); 
    ZipEntry ze = null;

            while ((ze = zipIs.getNextEntry()) != null) {

                FileOutputStream fout = new FileOutputStream(folder +"/"+ 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();
}


Answer 2:

您可以直接资产存放未压缩的文件(即解压压缩到资产/文件夹)。 这样一来,就可以直接访问文件,当您建立APK他们无论如何都会被压缩。



Answer 3:

您可以创建在以下方式ZipInputStream:

ZipInputStream zipIs = new ZipInputStream(context.getResources().openRawResource(your.package.com.R.raw.filename)); 
ZipEntry ze = null;

        while ((ze = zipIs.getNextEntry()) != null) {

            FileOutputStream fout = new FileOutputStream(FOLDER_NAME +"/"+ 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();


文章来源: Reading files from a ZIP file in your Android assets folder