安卓緩存管理工具類

package tv.buka.roomSdk.util;

import android.content.Context;
import android.os.Environment;
import android.text.format.Formatter;

import java.io.File;

import tv.buka.roomSdk.util.uploadAndDownload.DownloadTask;

/**
 * @說明: //清除緩存、獲取緩存文件大小、格式化
 * @作者: hwk
 * @創建日期: 2017/8/24 15:58
 */
public class CacheDataManager {
    /**
     * 清理系統緩存
     *
     * @param context
     */
    public static void clearSystemCache(Context context) {
        try {
            //系統緩存
            deleteDir(context.getCacheDir());
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                deleteDir(context.getExternalCacheDir());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 清理過期緩存文件,啓動頁調用
     */
    public static void clearPastDueCacheFile() {
        try {
            //在線預覽緩存
            File file = new File(Environment.getExternalStorageDirectory() + "/" + ConstantUtil.ROOT_NAME + "/fileCache/");
            deletePastDueFile(file);
            //日曆緩存
            File fileLog = new File(Environment.getExternalStorageDirectory() + "/" + "/logger/");
            deletePastDueFile(fileLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 先根遍歷序遞歸刪除文件夾
     *
     * @param dirFile 要被刪除的文件或者目錄
     */
    private static void deletePastDueFile(File dirFile) {
        try {
            if (dirFile.exists()) {
                if (dirFile.isFile()) {
                    if (isPastDue(dirFile)) {
                        dirFile.delete();
                    }
                } else {
                    File[] files = dirFile.listFiles();
                    if (files != null && files.length != 0) {
                        for (File file : dirFile.listFiles()) {
                            if (isPastDue(file)) {
                                deletePastDueFile(file);
                            }
                        }
                    }
                    if (isPastDue(dirFile)) {
                        dirFile.delete();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static long pastDueTime = 7 * 24 * 60 * 60 * 1000;//文件過期清理的時間

    /**
     * 判斷一個文件、文件夾是否過期
     *
     * @param file
     * @return
     */
    private static boolean isPastDue(File file) {
        try {
            long lastTime = file.lastModified();
            long nowTime = System.currentTimeMillis();
            return (nowTime - lastTime) > pastDueTime;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 刪除文件夾
     *
     * @param dir
     * @return
     */
    private static boolean deleteDir(File dir) {
        try {
            if (dir != null && dir.isDirectory()) {
                String[] children = dir.list();
                for (int i = 0; i < children.length; i++) {
                    boolean success = deleteDir(new File(dir, children[i]));
                    if (!success) {
                        return false;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dir.delete();
    }

    /**
     * 獲取文件夾大小
     *
     * @param file
     * @return
     */
    public static long getFolderSize(File file) {
        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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章