文件存储
文件存储可以在不同存储环境对应的目录下存储文件,并且提供了文件加解密读写的工具类。
使用文件存储
类似数据库和键值对存储,文件存储也可以通过对应的存储环境获取操作实例。
// 获取全局存储环境下的文件访问接口
TMFFile fileStorage = TMFStorage.getDefault().file();
通过 TMFFile 可以获取对应环境下的文件存储路径。
// 获取全局存储环境下 App 内部存储的文件,传入的参数为文件相对路径
File internalFile = fileStorage.getInternalFile("file_storage_demo");
// 获取全局存储环境下 SD 卡存储的文件,传入的参数为文件相对路径
File ExternalFile = fileStorage.getExternalFile("file_storage_demo");
文件加解密存储
统一存储组件提供了 TMFEncryptedInputStream 和 TMFEncryptedOutputStream 来进行文件的加解密读写操作,其使用方式类似 FileInputStream 以及 FileOutputStream。
// 加密写入文件
File internalFile = fileStorage.getInternalFile("file_storage_demo");
String data = "test";
String key = "12345";
TMFFileOutputStream outStream = null;
try {
outStream = new TMFEncryptedOutputStream(
internalFile, // 要写入的 File
key.getBytes(), // 写入文件的密钥
TMFCipher.AlgorithmType.AES128); // 加密算法,如果传 null 默认为 AES128
outStream.write(data.getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
FileUtils.closeQuietly(outStream);
}
// 解密读取文件
File internalFile = fileStorage.getInternalFile("file_storage_demo");
String key = "12345";
TMFFileInputStream inStream = null;
ByteArrayOutputStream outStream = null;
try {
inStream = new TMFEncryptedInputStream(
internalFile, // 要读取的 File
key.getBytes(), // 读取文件的密钥
TMFCipher.AlgorithmType.AES128); // 加密算法,如果传 null 默认为 AES128
outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
FileUtils.closeQuietly(inStream);
FileUtils.closeQuietly(outStream);
}
您也可以使用 FileUtils 工具类方便地读写加密文件。
File internalFile = fileStorage.getInternalFile("file_storage_demo");
String data = "test";
String key = "12345";
// 加密写入文件
boolean result = FileUtils.writeFileEncrypted(data.getBytes(), internalFile,
key.getBytes(), TMFCipher.getsDefaultAlgorithmType());
// 解密读取文件
byte[] output = FileUtils.readFileEncrypted(internalFile, key.getBytes(),
TMFCipher.getsDefaultAlgorithmType());