看!
1 /** 2 * 主要功能有: 清除内/外缓存、清除数据库、清除sharedPreference、清除files和清除自定义目录 3 */ 4 public class DataCleanManager { 5 6 /** 7 * 清除本应用所有的数据 8 */ 9 public static void cleanApplicationData(Context context,String...filepath) { 10 cleanInternalCache(context); 11 cleanExternalCache(context); 12 cleanDatabases(context); 13 cleanSharedPreference(context); 14 cleanFiles(context); 15 if (filepath == null) { 16 return; 17 } 18 for (String filePath : filepath) { 19 cleanCustomCache(filePath); 20 } 21 } 22 23 /** 24 * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) 25 */ 26 public static void cleanInternalCache(Context context) { 27 deleteFilesByDirectory(context.getCacheDir()); 28 } 29 30 /** 31 * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * 32 */ 33 public static void cleanDatabases(Context context) { 34 deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/databases")); 35 } 36 37 /** 38 * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * 39 */ 40 public static void cleanSharedPreference(Context context) { 41 deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/shared_prefs")); 42 } 43 44 /** 45 * 按名字清除本应用数据库 46 */ 47 public static void cleanDatabaseByName(Context context,String dbName) { 48 context.deleteDatabase(dbName); 49 } 50 51 /** 52 * 清除/data/data/com.xxx.xxx/files下的内容 * * 53 */ 54 public static void cleanFiles(Context context) { 55 deleteFilesByDirectory(context.getFilesDir()); 56 } 57 58 /** 59 * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) 60 */ 61 public static void cleanExternalCache(Context context) { 62 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 63 deleteFilesByDirectory(context.getExternalCacheDir()); 64 } 65 } 66 67 /** 68 * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 69 */ 70 public static void cleanCustomCache(String filePath) { 71 deleteFilesByDirectory(new File(filePath)); 72 } 73 74 /** 75 * * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * 76 * 77 * @param directory 78 */ 79 private static void deleteFilesByDirectory(File directory) { 80 if (directory != null && directory.exists() && directory.isDirectory()) { 81 for (File item : directory.listFiles()) { 82 item.delete(); 83 } 84 } 85 } 86 87 public static long getFolderSize(File file) throws Exception { 88 long size = 0; 89 try { 90 File[] fileList = file.listFiles(); 91 for (int i = 0;i < fileList.length;i++) { 92 // 如果下面还有文件 93 if (fileList[i].isDirectory()) { 94 size = size + getFolderSize(fileList[i]); 95 }else { 96 size = size + fileList[i].length(); 97 } 98 } 99 }catch(Exception e) { 100 e.printStackTrace(); 101 } 102 return size; 103 } 104 105 /** 106 * 删除指定目录下文件及目录 107 */ 108 public static void deleteFolderFile(String filePath,boolean deleteThisPath) { 109 if (!TextUtils.isEmpty(filePath)) { 110 try { 111 File file = new File(filePath); 112 if (file.isDirectory()) {// 如果下面还有文件 113 File files[] = file.listFiles(); 114 for (int i = 0;i < files.length;i++) { 115 deleteFolderFile(files[i].getAbsolutePath(),true); 116 } 117 } 118 if (deleteThisPath) { 119 if (!file.isDirectory()) {// 如果是文件,删除 120 file.delete(); 121 }else {// 目录 122 if (file.listFiles().length == 0) {// 目录下没有文件或者目录,删除 123 file.delete(); 124 } 125 } 126 } 127 }catch(Exception e) { 128 e.printStackTrace(); 129 } 130 } 131 } 132 133 /** 134 * 格式化单位 135 */ 136 public static String getFormatSize(long size) { 137 long kiloByte = size / 1024; 138 139 long megaByte = kiloByte / 1024; 140 if (megaByte < 1) { 141 BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); 142 return result1.setScale(0,BigDecimal.ROUND_HALF_UP).toPlainString() + "KB"; 143 } 144 145 long gigaByte = megaByte / 1024; 146 if (gigaByte < 1) { 147 BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); 148 return result2.setScale(0,BigDecimal.ROUND_HALF_UP).toPlainString() + "MB"; 149 } 150 151 long teraBytes = gigaByte / 1024; 152 if (teraBytes < 1) { 153 BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); 154 return result3.setScale(0,BigDecimal.ROUND_HALF_UP).toPlainString() + "GB"; 155 } 156 BigDecimal result4 = new BigDecimal(teraBytes); 157 return result4.setScale(0,BigDecimal.ROUND_HALF_UP).toPlainString() + "TB"; 158 } 159 160 public static String getCacheSize(File file) throws Exception { 161 return getFormatSize(getFolderSize(file)); 162 } 163 164 }
时间: 2024-10-12 21:27:06