Android Jetpack Security示例代码编译失败:FileReader无适配EncryptedFile的构造方法
解决Jetpack Security EncryptedFile无法用FileReader读取的问题
嘿,我来帮你搞定这个编译报错!你遇到的问题核心很简单:FileReader的构造函数不接受EncryptedFile对象作为参数,它只认File、文件路径字符串或者FileDescriptor类型的输入。而EncryptedFile是Jetpack Security封装的加密文件类,得用它自带的方法来获取可读流。
错误原因分析
你的代码里直接把EncryptedFile实例传给FileReader:
new BufferedReader(new FileReader(encryptedFile))
这就触发了编译错误,因为FileReader没有匹配EncryptedFile的构造函数。
修正方案
EncryptedFile提供了openFileInput()方法,专门用来获取加密文件的输入流。我们需要用这个方法拿到InputStream,再用InputStreamReader把它包装成字符流,最后传给BufferedReader。
修正后的完整测试函数
void jetpackTest() { KeyGenParameterSpec keyGenParameterSpec = MasterKeys.AES256_GCM_SPEC; String masterKeyAlias = MasterKeys.getOrCreate(keyGenParameterSpec); String fileToRead = "my_sensitive_data.txt"; EncryptedFile encryptedFile = new EncryptedFile.Builder( new File("private", fileToRead), this, masterKeyAlias, EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB ).build(); StringBuffer stringBuffer = new StringBuffer(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(encryptedFile.openFileInput()))) { String line = reader.readLine(); while (line != null) { stringBuffer.append(line).append('\n'); line = reader.readLine(); } } catch (IOException e) { // Error occurred opening encrypted file for reading. e.printStackTrace(); // 建议添加日志方便排查问题 } finally { String contents = stringBuffer.toString(); // 这里可以处理读取到的加密内容 } }
关键修改点
- 把
new FileReader(encryptedFile)替换成new InputStreamReader(encryptedFile.openFileInput()) - 可选:在catch块里添加日志打印,方便后续排查IO异常
另外,你用的androidx.security:security-crypto:1.0.0-rc01版本是没问题的,这个版本已经稳定支持EncryptedFile的所有核心方法,不需要调整依赖版本。
内容的提问来源于stack exchange,提问作者spartygw
相关产品推荐
相关产品推荐

