package com.jmheart.tools; import java.io.File; import java.math.BigDecimal; import android.annotation.SuppressLint; import android.content.Context; import android.os.Environment; import android.text.TextUtils; /* * file-��ͨ���ļ��洢 * database-���ݿ��ļ���.db�ļ��� * sharedPreference-��������(.xml�ļ��� * cache-ͼƬ�����ļ� * * /data/data/com.xxx.xxx/cache - Ӧ���ڻ��棨ע����Ӧ����getCacheDir()�� * /data/data/com.xxx.xxx/databases - Ӧ�������ݿ� * /data/data/com.xxx.xxx/shared_prefs - Ӧ���������ļ� * /data/data/com.xxx.xxx/files - Ӧ�����ļ���ע����Ӧ����getFilesDir()) */ public class DataCleanManager { /** * �����Ӧ���ڲ�����(/data/data/com.xxx.xxx/cache) * * @param context */ public static void cleanInternalCache(Context context) { deleteFilesByDirectory(context.getCacheDir()); } /** * �����Ӧ���������ݿ�(/data/data/com.xxx.xxx/databases) * * @param context */ @SuppressLint("SdCardPath") public static void cleanDatabases(Context context) { deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/databases")); } /** * �����Ӧ��SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * @param context */ @SuppressLint("SdCardPath") public static void cleanSharedPreference(Context context) { deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/shared_prefs")); } /** * �����������Ӧ�����ݿ� * * @param context * @param dbName */ public static void cleanDatabaseByName(Context context, String dbName) { context.deleteDatabase(dbName); } /** * ���/data/data/com.xxx.xxx/files�µ����� * * @param context */ public static void cleanFiles(Context context) { deleteFilesByDirectory(context.getFilesDir()); } /** * ����ⲿcache�µ�����(/mnt/sdcard/android/data/com.xxx.xxx/cache) * * @param context */ public static void cleanExternalCache(Context context) { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { deleteFilesByDirectory(context.getExternalCacheDir()); } } /** * ����Զ���·���µ��ļ���ʹ����С�ģ��벻Ҫ��ɾ�� * ����ֻ֧��Ŀ¼�µ��ļ�ɾ�� * @param filePath */ public static void cleanCustomCache(String filePath) { deleteFilesByDirectory(new File(filePath)); } /** * �����Ӧ�����е����� * * @param context * @param filepath */ public static void cleanApplicationData(Context context, String... filepath) { cleanInternalCache(context); cleanExternalCache(context); cleanDatabases(context); cleanSharedPreference(context); cleanFiles(context); for (String filePath : filepath) { cleanCustomCache(filePath); } } /** * ɾ������ ����ֻ��ɾ��ij���ļ����µ��ļ�����������directory�Ǹ��ļ������������� * * @param directory */ private static void deleteFilesByDirectory(File directory) { if (directory != null && directory.exists() && directory.isDirectory()) { for (File item : directory.listFiles()) { item.delete(); } } } // ��ȡ�ļ� // 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 deleteThisPath * @param filepath * @return */ public static void deleteFolderFile(String filePath, boolean deleteThisPath) { if (!TextUtils.isEmpty(filePath)) { try { File file = new File(filePath); if (file.isDirectory()) {// ������滹���ļ� File files[] = file.listFiles(); for (int i = 0; i < files.length; i++) { deleteFolderFile(files[i].getAbsolutePath(), true); } } if (deleteThisPath) { if (!file.isDirectory()) {// ������ļ���ɾ�� file.delete(); } else {// Ŀ¼ if (file.listFiles().length == 0) {// Ŀ¼��û���ļ�����Ŀ¼��ɾ�� file.delete(); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * ��ʽ����λ * * @param size * @return */ public static String getFormatSize(double size) { double kiloByte = size / 1024; if (kiloByte < 1) { return size + "Byte"; } double megaByte = kiloByte / 1024; if (megaByte < 1) { BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); return result1.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "KB"; } double gigaByte = megaByte / 1024; if (gigaByte < 1) { BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); return result2.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "MB"; } 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"; } public static String getCacheSize(File file) throws Exception { return getFormatSize(getFolderSize(file)); } }