【问题标题】:Unable to extract obb file downloaded from google play application无法提取从 google play 应用程序下载的 obb 文件
【发布时间】:2013-11-26 12:54:06
【问题描述】:

我成功实现了apk扩展。并且在Android->Obb->PackageName->com.1.com.packagename.obb下载了obb文件

但是当我去提取时,我遇到了 issue.Eof 文件异常 在日志中解压异常2。

例外:- java.io.FileNotFoundException:/storage/sdcard0/.MyApp/BGP050@2x.jpg:打开失败:ENOENT(没有这样的文件或目录)

如果有人有想法请回复提前谢谢....

调用提取文件的函数

public void extract()
{

            String packageName = getApplicationContext().getPackageName();

            File root = Environment.getExternalStorageDirectory();
            File expPath = new File(root.toString() + "/Android/obb/" + packageName);

            if (expPath.exists()) {
                String strMainPath = null;
                try {
                    strMainPath = expPath + File.separator + "main."
                        + getPackageManager().getPackageInfo(
                                    getPackageName(), 0).versionCode + "."
                            + packageName + ".obb";


                Log.e("Extract File path", "===>"+strMainPath);

                File f=new File(strMainPath);
                if(f.exists()){
                    Log.e("Extract From File path", "===> not exist");
                }
                else
                {
                    Log.e("Extract From File path", "===> exist");
                }

                flag = extractZip(strMainPath,Environment.getExternalStorageDirectory()+"/"+Constant.FOLDERNAME);

                Log.e("After Extract Zip", "===>"+flag);
                } catch (NameNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

}

功能如下

private boolean extractZip(String pathOfZip,String pathToExtract)
 {


        int BUFFER_SIZE = 1024;
        int size;
        byte[] buffer = new byte[BUFFER_SIZE];


        try {
            File f = new File(pathToExtract);
            if(!f.isDirectory()) {
                f.mkdirs();
            }
            ZipInputStream zin = new ZipInputStream(new BufferedInputStream(new FileInputStream(pathOfZip), BUFFER_SIZE));
            try {
                ZipEntry ze = null;
                while ((ze = zin.getNextEntry()) != null) {
                    String path = pathToExtract  +"/"+ ze.getName();

                    if (ze.isDirectory()) {
                        File unzipFile = new File(path);
                        if(!unzipFile.isDirectory()) {
                            unzipFile.mkdirs();
                        }
                    }
                    else {
                        FileOutputStream out = new FileOutputStream(path, false);
                        BufferedOutputStream fout = new BufferedOutputStream(out, BUFFER_SIZE);
                        try {
                            while ( (size = zin.read(buffer, 0, BUFFER_SIZE)) != -1 ) {
                                fout.write(buffer, 0, size);
                            }

                            zin.closeEntry();
                        }catch (Exception e) {
                            Log.e("Exception", "Unzip exception 1:" + e.toString());
                        }
                        finally {
                            fout.flush();
                            fout.close();
                        }
                    }
                }
            }catch (Exception e) {
                Log.e("Exception", "Unzip exception2 :" + e.toString());
            }
            finally {
                zin.close();
            }
            return true;
        }
        catch (Exception e) {
            Log.e("Exception", "Unzip exception :" + e.toString());
        }
        return false;

    }

【问题讨论】:

  • 爱你!这救了我!完美!
  • 非常感谢! @jagdish

标签: android zip extract expansion


【解决方案1】:

试试这个:-

经过一番挣扎,我终于找到了解决方案。我也在 ubuntu12.04 中右键单击以压缩整个文件夹和子文件夹。

但之后我尝试选择所有图像/文件,然后将它们压缩到新文件夹。 通过上面的代码,我能够成功提取所有文件。

谢谢……

【讨论】:

  • ubuntu12.04是什么意思?请告诉我我必须把我的 .obb 路径放在哪里。我在“android/obb/”中有它。我下载了 .obb 文件,但我不知道如何获取我的原始文件,即阅读器可读的“.zim”文件。我必须在哪里实现上述代码?到我的下载器活动或其他区域。
  • @user2592807,我需要把它放在下载器活动中,应用程序连接到播放商店服务器以检查obb文件。
  • 但它给了我“常量和标志”的错误,无法解析为变量?我现在能做什么?
  • @user2592807,Constant 是自定义类,您可以使用自己的类并在顶部声明文件夹。