目录
private void fileLoad(String s) {
File file = new File(getFilesDir().toURI()+"/diary.txt");
if (!file.exists()) {
try {
boolean flag = file.createNewFile();
if (flag) {
Log.d("fileCreate", "success ");
}else {
Log.d("fileCreate", "failure ");
}
}catch (Exception e){
e.printStackTrace();
}
} else {
Log.d("fileCreate", "has been created ");
}
FileOutputStream outputStream;
String separator = "------------------------\n"; // 分隔符
try {
outputStream = openFileOutput(file.getAbsolutePath(), Context.MODE_APPEND);
outputStream.write(s.getBytes());
outputStream.write(separator.getBytes()); // 写入分隔符
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
代码解析
文件检查与创建
File file = new File(getFilesDir().toURI()+"/diary.txt");
if (!file.exists()) {
try {
boolean flag = file.createNewFile();
if (flag) {
Log.d("fileCreate", "success ");
} else {
Log.d("fileCreate", "failure ");
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.d("fileCreate", "has been created ");
}
getFilesDir()
方法获取应用的文件目录,是一个安全的私有目录,其他应用无法访问这些文件。- 使用
File
对象检查diary.txt
文件是否存在于应用的文件目录中。 - 如果文件不存在,尝试创建新文件。创建成功与否会通过
Log.d
打印日志信息。
文件写入
FileOutputStream outputStream;
String separator = "------------------------\n"; // 分隔符
try {
outputStream = openFileOutput(file.getAbsolutePath(), Context.MODE_APPEND);
outputStream.write(s.getBytes());
outputStream.write(separator.getBytes()); // 写入分隔符
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
openFileOutput
方法以追加模式(Context.MODE_APPEND
)打开文件,允许向文件末尾追加内容而不是覆盖。- 使用
.write
方法写入字符串s
(预期是日记内容)及后面的分隔符到文件。 - 最后,关闭文件输出流以释放资源。
实际应用考虑
- 异常处理:代码中已经有基本的异常处理,打印堆栈跟踪信息。在实际应用中,可以根据异常类型进行更精细的错误处理或用户提示。
- 资源管理:尽管示例代码中正确关闭了文件输出流,使用
try-with-resources
语句可以更加优雅地管理资源,自动关闭流。 - 性能优化:当频繁写入文件时,考虑使用缓冲输出流
BufferedOutputStream
包装FileOutputStream
,以减少实际的磁盘写入操作,提高性能。 - 用户反馈:创建文件或写入文件时,提供用户反馈(如通过Toast消息)可以改善用户体验,尤其是在操作成功或失败时。
- 权限要求:在Android 6.0及以上版本,如果操作外部存储,需要动态请求存储权限。虽然这个示例使用的是内部存储,但如果改为外部存储,需要处理运行时权限。
总结
这段代码为开发者提供了一个实用的文件操作示例,展示了如何在Android应用中安全地创建和管理文件,以及如何向文件中追加内容。通过对代码的进一步优化和改进,可以更好地融入到实际应用的开发中,提升应用的稳定性和用户体验。