admin
2020-07-14 7af22bf20c862c8ab2270cfeef8f3530f174ac9f
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package com.wpc.library.util;
 
import android.content.Context;
import android.widget.TextView;
import android.widget.Toast;
 
import java.io.File;
import java.math.BigDecimal;
 
/**
 * 获取APP缓存大小
 * Created by weikou2015 on 2017/3/10.
 */
 
public class DataCleanManager {
 
    /**
     * 获取缓存大小
     *
     * @param context
     * @return
     * @throws Exception
     */
    public static String getTotalCacheSize(Context context) throws Exception {
        long cacheSize = getFolderSize(context.getCacheDir());
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            cacheSize += getFolderSize(context.getExternalCacheDir());
        }
        return getFormatSize(cacheSize);
    }
 
    /**
     * 清除缓存
     *
     * @param context
     */
    public static void clearAllCache(Context context, TextView tv) {
        deleteDir(context.getCacheDir());
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            if (deleteDir(context.getExternalCacheDir())) {
//                SingleToast.showToast(context, "清理缓存成功!");
                Toast.makeText(context, "清理缓存成功!", Toast.LENGTH_LONG).show();
                String cache = "";
                try {
                    cache = DataCleanManager.getTotalCacheSize(context);
//                    cache = DataCleanManager.getOutsideCacheSize(context);
                    tv.setText(cache);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
//                SingleToast.showToast(context, "找不到存储文件,清理缓存失败");
                Toast.makeText(context, "找不到存储文件,清理缓存失败", Toast.LENGTH_LONG).show();
            }
        }
    }
 
    /**
     * 获取外部文件缓存大小
     *
     * @param context
     * @return
     * @throws Exception
     */
    public static String getOutsideCacheSize(Context context) throws Exception {
        return getFormatSize(getFolderSize(context.getExternalCacheDir()));
    }
 
    private static boolean deleteDir(File dir) {
        try {
            if (dir != null && dir.isDirectory()) {
                File[] children = dir.listFiles();
                if (children.length == 0) {
                    dir.delete();
                } else {
                    for (int i = 0; i < children.length; i++) {
                        if (children[i].isDirectory()) {
                            deleteDir(children[i]);
                        } else {
                            children[i].delete();
                        }
                    }
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
 
    // 获取文件大小
    //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
    //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
    public static long getFolderSize(File file) throws Exception {
        long size = 0;
        try {
            File[] fileList = file.listFiles();
            for (int i = 0; i < fileList.length; i++) {
                // 如果下面还有文件
                if (fileList[i].isDirectory()) {
                    size = size + getFolderSize(fileList[i]);
                } else {
                    size = size + fileList[i].length();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return size;
    }
 
    /**
     * 格式化单位
     *
     * @param size
     * @return
     */
    public static String getFormatSize(double size) {
        double kiloByte = size / 1024;
        if (kiloByte < 1) {
//            return size + "Byte";
            return "0.0M";
        }
 
        double megaByte = kiloByte / 1024;
        if (megaByte < 1) {
            BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
            return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
                    .toPlainString() + "K";
        }
 
        double gigaByte = megaByte / 1024;
        if (gigaByte < 1) {
            BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
            return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
                    .toPlainString() + "M";
        }
 
        double teraBytes = gigaByte / 1024;
        if (teraBytes < 1) {
            BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
            return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
                    .toPlainString() + "GB";
        }
        BigDecimal result4 = new BigDecimal(teraBytes);
        return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
                + "TB";
    }
}