CacheDataManager.java
3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package com.studymachine.www.manager;
import android.content.Context;
import android.os.Environment;
import com.tencent.bugly.crashreport.CrashReport;
import java.io.File;
import java.math.BigDecimal;
/**
* time : 2019/03/01
* desc : 应用缓存管理
*/
public final class CacheDataManager {
/**
* 获取缓存大小
*/
public static String getTotalCacheSize(Context context) {
long cacheSize = getFolderSize(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
cacheSize += getFolderSize(context.getExternalCacheDir());
}
return getFormatSize(cacheSize);
}
/**
* 清除缓存
*/
public static void clearAllCache(Context context) {
deleteDir(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
}
}
/**
* 删除文件夹
*/
private static boolean deleteDir(File dir) {
if (dir == null) {
return false;
}
if (!dir.isDirectory()) {
return dir.delete();
}
String[] children = dir.list();
if (children == null) {
return false;
}
for (String child : children) {
deleteDir(new File(dir, child));
}
return false;
}
// 获取文件大小
// Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
// Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
private static long getFolderSize(File file) {
long size = 0;
try {
File[] list = file.listFiles();
if (list == null) {
return 0;
}
for (File temp : list) {
// 如果下面还有文件
if (temp.isDirectory()) {
size = size + getFolderSize(temp);
} else {
size = size + temp.length();
}
}
} catch (Exception e) {
CrashReport.postCatchedException(e);
}
return size;
}
/**
* 格式化单位
*/
public static String getFormatSize(double size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
// return size + "Byte";
return "0K";
}
double megaByte = kiloByte / 1024;
if (megaByte < 1) {
return new BigDecimal(kiloByte).setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "K";
}
double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
return new BigDecimal(megaByte).setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "M";
}
double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
return new BigDecimal(gigaByte).setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
}
return new BigDecimal(teraBytes).setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
}
}