package chengying.com.core.util
import android.content.Context
import android.os.Environment
import java.io.File
import java.math.BigDecimal
/**
* Created by yangfan
* nrainyseason@163.com
* 清理缓存
*/
object DataCleanManager {
/**
* 获取当前缓存
*
* @param context
* @return
* @throws Exception
*/
@Throws(Exception::class)
fun getTotalCacheSize(context: Context): String {
var cacheSize = getFolderSize(context.cacheDir)
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
cacheSize += getFolderSize(context.externalCacheDir)
}
return getFormatSize(cacheSize.toDouble())
}
/**
* 清空缓存
*
* @param context
*/
fun clearAllCache(context: Context) {
deleteDir(context.cacheDir)
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
deleteDir(context.externalCacheDir)
}
}
private fun deleteDir(dir: File?): Boolean {
if (dir != null && dir.isDirectory) {
val children = dir.list()
for (i in children.indices) {
val success = deleteDir(File(dir, children[i]))
if (!success) {
return false
}
}
}
return dir!!.delete()
}
// 获取文件
//Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
//Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
@Throws(Exception::class)
fun getFolderSize(file: File?): Long {
var size: Long = 0
try {
val fileList = file!!.listFiles()
for (i in fileList.indices) {
// 如果下面还有文件
if (fileList[i].isDirectory) {
size = size + getFolderSize(fileList[i])
} else {
size = size + fileList[i].length()
}
}
} catch (e: Exception) {
e.printStackTrace()
}
return size
}
/**
* 格式化单位
*
* @param size
* @return
*/
fun getFormatSize(size: Double): String {
val kiloByte = size / 1024
if (kiloByte < 1) {
return "0.00M"
}
val megaByte = kiloByte / 1024
if (megaByte < 1) {
val result1 = BigDecimal(java.lang.Double.toString(kiloByte))
return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "K"
}
val gigaByte = megaByte / 1024
if (gigaByte < 1) {
val result2 = BigDecimal(java.lang.Double.toString(megaByte))
return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "M"
}
val teraBytes = gigaByte / 1024
if (teraBytes < 1) {
val result3 = BigDecimal(java.lang.Double.toString(gigaByte))
return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "G"
}
val result4 = BigDecimal(teraBytes)
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB"
}
}
调用获取缓存大小
DataCleanManager.getTotalCacheSize(ctx)
调用清理缓存
DataCleanManager.clearAllCache(this@SettingActivity)