将日志信息content写入本地外置存储卡:
代码比较简单,需要注意的是在构造FileWriter 的时候需要使用
new FileWriter(name.getAbsolutePath(), true)而不能使用new FileWriter(name.getName(), true)。路径需要是全路径。后面的true是追加模式,用false则为覆盖模式。
代码如下:
private static String curDate = "20211102";
private static final String LogFileType = ".txt";
/**
* 将content内容写入日志
* 追加文件:使用FileWriter
* @param fileName
* @param content
*/
public static void writeLog(String fileName,String content) {
if (!writePermissionFlag){
return;
}
if (curDate.equals("")){
curDate = getCurDate();
}
String path = Environment.getExternalStorageDirectory() + "/Log/"; //文件路径
System.out.println("-------------writeLog path:" + path);
try {
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
File name = new File(path,fileName + curDate + LogFileType);
if (!name.exists()){
name.createNewFile();
name.setWritable(true);
}
FileWriter writer = new FileWriter((name.getAbsolutePath()), true);//path + fileName
writer.write(curDate + ":" + content + "\n");
writer.flush();
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
可以在写文件前进行权限申请:
//读写权限
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
//请求状态码
private static int REQUEST_PERMISSION_CODE = 1;
public static boolean writePermissionFlag = false;
/**
* 检查权限,请求权限操作,
* 在需要写入文件的时候调用,获取到权限后再执行文件操作
*/
public boolean requestWritePermissions() {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);
return false;
}else{
System.out.println("---------------permission granted");
writePermissionFlag = true;
return true;
}
}
return true;
}
/**
* 权限请求结果处理
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
int deniedCount = 0;
if (requestCode == REQUEST_PERMISSION_CODE) {
for (int i = 0; i < grantResults.length; i++) {
int result = grantResults[i];
if (result == PackageManager.PERMISSION_DENIED) {
deniedCount++;
}
}
System.out.println("----------------deniedCount:" + deniedCount);
if (deniedCount > 0) {
Toast.makeText(mContext, "请先打开权限", Toast.LENGTH_LONG).show();
} else {
writePermissionFlag = true;
OnPermissionGranted();
}
}
}
/**
* 权限给予后的操作
*/
public void OnPermissionGranted() {};