**
可以通过获取文件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。(资格写的判断条件,担心漏洞,通常不会发生)
}