以下是一个示例代码,用于在 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 方法用于将日志内容写入文件中。它使用 FileOutputStreamOutputStreamWriter 将日志写入文件,并关闭流。

请注意,在使用此代码之前,您需要为应用添加适当的文件读写权限。

Android 循环写入日志,并限制文件大小为 1MB(只保留最新日志)

原文地址: https://www.cveoy.top/t/topic/mZEB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录