我有几个资产文件存储在资产文件夹中。
我使用AssetManager getAssets并将这些文件复制到外部目录:
in = assetManager.open(filename);
File outFile = new File(getExternalFilesDir(null), filename);
out = new FileOutputStream(outFile);
String filePath = outFile.getAbsolutePath();
然后我使用文件路径打开文件:
this.mydat = new RandomAccessSteamIn();
this.mydat.setFile(filePath1);
this.mydat = new RandomAccessFile(filePath2, "r");
读取二进制资产文件。
这是我第一次部署Android应用,所以我有一些问题:
在每次应用升级时,我想替换assets文件夹中的二进制文件(使用较新版本),但保留文件名。这是一个问题,如果我每次检测到应用程序升级时,都会将文件重新复制到外部目录吗?
有没有更好的方法来实现这个目标?
答案 0 :(得分:1)
如果文件更新,我不明白为什么再次将文件重新写入外部目录可能不好;事实上,我在多个用例中遇到过这种情况,每次编辑时都必须在外部目录上重写文件。所以我建议我使用一种方法。
首先,在build.gradle
中,我生成当前资产中文件的MD5哈希值,并将其存储为resValue
字符串。
其次(这可能发生在您的应用中需要的任何地方),我读取存储在resValue
中的哈希并将其与先前存储的MD5哈希进行比较(我将其存储在SharedPreferences
中,这value表示资产文件在您的案例中更新为较新版本之前的哈希值。
最后,如果哈希值不匹配,我运行代码从AssetManager
读取文件并在外部目录上重写。
这样,无论何时修改资产中的文件,它都会生成不同的哈希值,并且可以直接在外部目录上读取和写入。