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

**

可以通过获取文件md5来进行校验文件的完整性

我是用来对比,解压出来的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。(资格写的判断条件,担心漏洞,通常不会发生)
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity,可以使用`System.IO`命名空间下的`File`类来操作文件,包括在Android环境下加载StreamingAssets文件夹的txt文件。但需要注意的是,直接使用`File`类在Android平台上加载StreamingAssets文件夹文件可能会导致路径问题。 在Android平台上,StreamingAssets文件夹文件会被打包到APK,并且无法直接使用`File`类的路径来访问。为了解决这个问题,你可以使用Unity的`Application.streamingAssetsPath`属性来获取StreamingAssets文件夹的路径,并结合`UnityWebRequest`类来加载文件。下面是一个示例代码: ```csharp using UnityEngine; using UnityEngine.Networking; using System.IO; public class LoadTxtFile : MonoBehaviour { public string fileName; // txt文件名 IEnumerator Start() { // 构建txt文件的完整路径 string filePath = Path.Combine(Application.streamingAssetsPath, fileName); UnityWebRequest www = UnityWebRequest.Get(filePath); #if UNITY_ANDROID && !UNITY_EDITOR // 在Android平台上使用UnityWebRequest来加载文件 www.url = filePath; #endif yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { // 获取txt文件内容 string txtContent = www.downloadHandler.text; Debug.Log(txtContent); } else { Debug.Log("Failed to load txt file: " + www.error); } } } ``` 上述代码,我们使用了`Path.Combine`方法来构建txt文件的完整路径,确保路径的正确性。然后,我们使用`UnityWebRequest`类来加载文件内容,并通过`downloadHandler.text`属性获取文件内容。 这样,你就可以在Android环境下加载StreamingAssets文件夹的txt文件了。请注意,上述代码在Android平台上会使用`UnityWebRequest`来加载文件,在其他平台上会使用`File`类来加载文件。这样可以保证在不同平台下的文件加载逻辑的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值