提问人:Ryan Pierce 提问时间:7/28/2020 最后编辑:Ryan Pierce 更新时间:9/15/2023 访问量:1565
如何在Android上覆盖EncryptedFile?
How to overwrite EncryptedFile on Android?
问:
使用 Android 的 EncryptedFile (androidx.security:security-crypto:1.1.0-alpha01),我可以使用以下代码成功编写文件
File file = new File(context.getFilesDir() + File.separator + filename);
KeyGenParameterSpec keyGenParameterSpec = MasterKeys.AES256_GCM_SPEC;
EncryptedFile encryptedFile = null;
try {
String masterKeyAlias = MasterKeys.getOrCreate(keyGenParameterSpec);
encryptedFile = new EncryptedFile.Builder(
file,
context,
masterKeyAlias,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build();
} catch (Exception exception) {
// log error
}
// write file
try {
BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(encryptedFile.openFileOutput()));
bufferedWriter.write(string);
bufferedWriter.close();
} catch (Exception exception) {
// log error
}
但是,当尝试覆盖同一文件时,写入操作将失败,并引发以下内容
java.io.IOException: output file already exists, please use a new file
我发现这是 EncryptedFile 的显式检查openFileOutput()
if (mFile.exists()) {
throw new IOException("output file already exists, please use a new file: "
+ mFile.getName());
}
为了解决这个问题,我能够通过删除文件(如果存在)来成功覆盖,然后再使用它来构建 EncryptedFile
File file = new File(context.getFilesDir() + File.separator + filename);
if (file.exists()) { file.delete(); }
... remaining code from top snippet above
这似乎是一个黑客,但我也不理解为 in 抛出异常的选择。有没有正确/更好的方法来覆盖?mFile.exists()
openFileOutput()
EncryptedFile
答: 暂无答案
评论