Android 循环写入日志,并限制文件大小为 1MB(只保留最新日志)
以下是一个示例代码,用于在 Android 中循环写入日志,并只保留最新的 1MB 日志文件。
import android.content.Context;
import android.os.Environment;
import android.text.format.DateFormat;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Date;
public class Logger {
private static final long MAX_LOG_SIZE = 1024 * 1024; // 1MB
private static Logger instance;
private Context context;
private Logger(Context context) {
this.context = context.getApplicationContext();
}
public static synchronized Logger getInstance(Context context) {
if (instance == null) {
instance = new Logger(context);
}
return instance;
}
public void writeLog(String log) {
try {
File logFile = getLogFile();
if (logFile.length() >= MAX_LOG_SIZE) {
clearLogFile();
}
writeToFile(logFile, log);
} catch (IOException e) {
e.printStackTrace();
}
}
private File getLogFile() throws IOException {
File logDir;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
logDir = new File(context.getExternalFilesDir(null), 'Logs');
} else {
logDir = new File(context.getFilesDir(), 'Logs');
}
if (!logDir.exists()) {
logDir.mkdirs();
}
String timeStamp = DateFormat.format('yyyyMMdd_HHmmss', new Date()).toString();
String logFileName = 'log_' + timeStamp + '.txt';
return new File(logDir, logFileName);
}
private void clearLogFile() throws IOException {
File logDir;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
logDir = new File(context.getExternalFilesDir(null), 'Logs');
} else {
logDir = new File(context.getFilesDir(), 'Logs');
}
if (!logDir.exists()) {
logDir.mkdirs();
}
File[] files = logDir.listFiles();
if (files != null) {
for (File file : files) {
file.delete();
}
}
}
private void writeToFile(File file, String data) throws IOException {
FileOutputStream fos = new FileOutputStream(file, true);
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write(data);
osw.flush();
osw.close();
}
}
使用示例:
Logger logger = Logger.getInstance(context);
logger.writeLog('This is a log message.');
上述代码中,Logger类是一个单例类,用于管理日志文件的写入和清理。MAX_LOG_SIZE常量定义了最大的日志文件大小,这里设置为 1MB。
在 writeLog 方法中,首先获取日志文件的路径并检查文件大小是否超过限制。如果超过限制,则调用 clearLogFile 方法清空日志文件。然后将日志内容写入文件中。
getLogFile 方法用于获取日志文件的路径。在这个示例中,日志文件存储在应用的外部存储目录的 Logs 文件夹中,如果外部存储不可用,则存储在应用的内部存储目录的 Logs 文件夹中。文件名包含了时间戳,以便区分不同的日志文件。
clearLogFile 方法用于清空日志文件。它遍历 Logs 文件夹中的所有文件,并将它们删除。
writeToFile 方法用于将日志内容写入文件中。它使用 FileOutputStream 和 OutputStreamWriter 将日志写入文件,并关闭流。
请注意,在使用此代码之前,您需要为应用添加适当的文件读写权限。
原文地址: https://www.cveoy.top/t/topic/mZEB 著作权归作者所有。请勿转载和采集!