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;
}
}