本文章demo下载地址:文件记录日志demo
在app日常运行过程中会产生非常多的信息,一般情况下我们是将用户日常使用中的信息上传到服务器中,但是在无网络环境下这个方法就不能用了。解决的方法是我们可以将这些记录保存在本地文件中,待有网络时再上传到服务器。
1、添加文件读写权限
Android 6.0及以上需要动态获取文件读写权限,这点需要注意。本例为简单示意,直接采用静态注册的方式,只可用于6.0以下的系统。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2、使用java的文件读写输入输出流
写入代码:
/**
* 文件路径
*/
public static final String ROOT_PATH = Environment
.getExternalStorageDirectory() + File.separator + "Mhwang";
public static final String ERROR_DIR_PATH = ROOT_PATH + File.separator + "ErrorNote";
/** 写日志
* @param message
*/
public static void writeNote(String message){
// 保存异常信息的路径
String path = ERROR_DIR_PATH + File.separator + "note"+DateUtil.getCurrentDate() + ".txt";
String occurTime = DateUtil.getCurrentTime();
File file = new File(path);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
// 保存日志文件
Writer writer = new FileWriter(file, true);
writer.write(occurTime + message+"\n");
writer.flush();
writer.close();
}catch (Exception e){
}
}
读取代码:
/** 读取数据
* @param path
* @return
*/
public static String read(String path){
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try {
String str = null;
reader = new BufferedReader(new FileReader(new File(path)));
while ((str = reader.readLine()) != null ){
builder.append(str);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
if (reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return builder.toString();
}
示例效果: