Android保存指定大小的日志文件

191 阅读1分钟

FileUtil 类主要提供了以下功能: 在保存日志之前,会检查日志文件的大小是否超过 10MB,如果超过则会删除该文件。 将日志信息以追加的方式写入到日志文件中。

object FileUtil {
    
    var PROJECT_FILE_PATH :String = ""
    val catchLogName = "log_catch.txt"

    /**
     * 初始化文件目录
     */
    fun init(context: Context) {
        PROJECT_FILE_PATH = getExternalStorageState(context) + File.separator // 项目路径
    }

    /**
     * 获取存储根目录
     * @param context
     * @return 外部存储根目录 || 内部根目录
     */
    fun getExternalStorageState(context: Context): String? {
        val state = Environment.getExternalStorageState()
        return if (Environment.MEDIA_MOUNTED == state) {
            val baseDirFile = context.getExternalFilesDir(null)
            if (baseDirFile == null) {
                context.filesDir.absolutePath
            } else {
                baseDirFile.absolutePath
            }
        } else {
            context.filesDir.absolutePath
        }
    }

    /**
     * 将日志信息保存到指定的文件中。
     * 
     * @param fileName 需要保存的日志文件名。
     * @param message 要写入日志的信息。
     * 说明:如果日志文件已存在且大小超过10MB,将删除旧的日志文件。
     */
    fun saveLog(fileName: String, message: String) {
        val time = DateUtil.parseToString(System.currentTimeMillis(), DateUtil.yyyy_MM_dd_HH_mm_ss)
        val hint = "$time: $message\n\n\n"

        // 创建文件对象
        val file = File(PROJECT_FILE_PATH+fileName)
        // 判断文件是否存在
        if (file.exists()) {
            // 获取文件大小
            val fileSize = file.length()
            // 判断文件大小是否大于10M
            if (fileSize > 10 * 1024 * 1024) { // 10M,单位为字节
                // 文件超过10M,删除文件
                file.delete()
            }
        }

        // 写入数据到文件
        try {
            // 创建文件输出流,并指定以追加模式打开文件
            val fos = FileOutputStream(file, true)
            // 将数据写入文件
            fos.write(hint.toByteArray())
            // 关闭文件输出流
            fos.close()
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }
}

Application初始化:

        FileUtil.init(context);

调用方式:

        FileUtil.saveLog(FileUtil.catchLogName,"error msg")