判断assets文件夹下的zip压缩包(单个js文件压缩包)里面js文件是否和之前解压出来保存在手机中的js文件代码一致

**

以下方法有效,不过最后被告知使用MD5来进行判断即可。各位自行考虑吧。QWQ

**

我是用来对比,解压出来的js文件通常要放置在安卓目录里面,每次app启动时都要调用这个文件来进行渲染,所以在每次打开app的时候就拿存放在assets文件夹下的zip源文件来和js文件进行对比,判断js文件是否被修改了或者破损了。

(assets文件夹下的内容只可读取不可写入)

 /**
   * //判断源zip文件与js文件是否一致
   * @param context   上下文
   * @param zipname   assets文件夹下的压缩包名称  xxx.zip
   * @param jsname    jsname解压出来的js文件的名称  xxx.js
   * @return    true 文件内容相等    false文件内容不相等
   */
  private static Boolean isEqual(Context context,String zipname,String jsname) {
    try {
      InputStream open = context.getResources().getAssets().open(zipname);
      ZipInputStream zipInputStream = new ZipInputStream(open);
      zipInputStream.getNextEntry();
      //未解压的zip文件
      BufferedReader bufferedReaderzip=new BufferedReader(new InputStreamReader(zipInputStream));
      //解压后的文件
      File fileStreamPath = context.getFileStreamPath(jsname);
      FileInputStream fileInputStream = new FileInputStream(fileStreamPath);//fileInputStream是inputStream的子类
      BufferedReader bufferedReaderjs = new BufferedReader(new InputStreamReader(fileInputStream));

      //判断解压后的文件在用户手机中是否被修改过了
      while (true){
        String strzip=new String();
        String strjs=new String();
        try {
          strzip = bufferedReaderzip.readLine();//是初始文件
          strjs = bufferedReaderjs.readLine();//需要对比这个文件和初始文件是否有差异
        }catch (NullPointerException e){
          //读到底部了
        }
        boolean bJs = strjs instanceof String;//为false说明读到底部了
        boolean bZip=strzip instanceof String;//为false说明读到底部了

        //其实可以用switch语句
        if (!bJs&&!bZip) {//两个文件都读完了
          //一样
          return true;
        }else if (!bJs||!bZip){//其中一个读完了,另一个没读完
          // 不一样
          return false;
        } else if (bJs && bZip) {//两个文件都没有读完,那么每次都进行对比
          if (strzip.equals(strjs)) {
            //一样  这里不执行任何操作
          }else {
            //不一样
            return false;
          }
        }
        Log.e(TAG, "zzzzip: "+strzip );
        Log.e(TAG, "jjjjs: "+strjs );
      }
    }catch (IOException e){
      e.printStackTrace();
    }
    return false;//默认false  预防出错,出错的话 那么就每次启动就重新解压,好过判断出错后导致的打不开app。(资格写的判断条件,担心漏洞,通常不会发生)
  }
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读