权限
<!--外部存储读取权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
源码
package com.waka.workspace.logtofile;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* 将Log日志写入文件中
* <p>
* 使用单例模式是因为要初始化文件存放位置
* <p>
* Created by waka on 2016/3/14.
*/
public class LogToFile {
private static String TAG = "LogToFile";
private static String logPath = null;//log日志存放路径
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US);//日期格式;
public static final String savePath = Environment
.getExternalStorageDirectory() +"/ibossprdpda/" ;
private static Date date = new Date();//因为log日志是使用日期命名的,使用静态成员变量主要是为了在整个程序运行期间只存在一个.log文件中;
/**
* 初始化,须在使用之前设置,最好在Application创建时调用
*
* @param context
*/
public static void init(Context context) {
logPath = getFilePath(context) + "/Logs";//获得文件储存路径,在后面加"/Logs"建立子文件夹
}
/**
* 获得文件存储路径
*
* @return
*/
private static String getFilePath(Context context) {
File dir = new File(savePath);
if (!dir.exists()) {
dir.mkdirs();
}
return savePath;//存当前app的文件夹里
}
private static final char VERBOSE = 'v';
private static final char DEBUG = 'd';
private static final char INFO = 'i';
private static final char WARN = 'w';
private static final char ERROR = 'e';
public static void v(String tag, String msg) {
writeToFile(VERBOSE, tag, msg);
}
public static void d(String tag, String msg) {
writeToFile(DEBUG, tag, msg);
}
public static void i(String tag, String msg) {
writeToFile(INFO, tag, msg);
}
public static void w(String tag, String msg) {
writeToFile(WARN, tag, msg);
}
public static void e(String tag, String msg) {
writeToFile(ERROR, tag, msg);
}
/**
* 将log信息写入文件中
*
* @param type
* @param tag
* @param msg
*/
private static void writeToFile(char type, String tag, String msg) {
if (null == logPath) {
Log.e(TAG, "logPath == null ,未初始化LogToFile");
return;
}
String fileName = logPath + "/log_" + dateFormat.format(new Date()) + ".log";//log日志名,使用时间命名,保证不重复
String log = dateFormat.format(date) + " " + type + " " + tag + " " + msg + "\n";//log日志内容,可以自行定制
//如果父路径不存在
File file = new File(logPath);
if (!file.exists()) {
file.mkdirs();//创建父路径
}
FileOutputStream fos = null;//FileOutputStream会自动调用底层的close()方法,不用关闭
BufferedWriter bw = null;
try {
fos = new FileOutputStream(fileName, true);//这里的第二个参数代表追加还是覆盖,true为追加,flase为覆盖
bw = new BufferedWriter(new OutputStreamWriter(fos));
bw.write(log);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();//关闭缓冲流
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
显然 上面是一个工具类 直接类名 点里面的方法即可 用的时候 :
LogToFile.v("标题","内容");
当然 用之前需要初始化 你可以选择在用到这个工具类的类里的onCreate里初始化 也可以在Application里去初始化(一劳永逸):
LogToFile.init(this);
这样 大功就告成拉 如果有问题(安卓10以上 ) 不妨把底下的东西放到 清单文件 <application 下
android:requestLegacyExternalStorage="true"