534ed0edc61e0a92e99b01700a15a19ca0635ee8.svn-base 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package eVVM.apk.helper;
  2. import android.content.Context;
  3. import android.os.Environment;
  4. import java.io.File;
  5. import java.math.BigDecimal;
  6. public final class CacheDataManager {
  7. /**
  8. * 获取缓存大小
  9. */
  10. public static String getTotalCacheSize(Context context) {
  11. long cacheSize = getFolderSize(context.getCacheDir());
  12. if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  13. cacheSize += getFolderSize(context.getExternalCacheDir());
  14. }
  15. return getFormatSize(cacheSize);
  16. }
  17. /**
  18. * 清除缓存
  19. */
  20. public static void clearAllCache(Context context) {
  21. deleteDir(context.getCacheDir());
  22. if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  23. deleteDir(context.getExternalCacheDir());
  24. }
  25. }
  26. /**
  27. * 删除文件夹
  28. */
  29. private static boolean deleteDir(File dir) {
  30. if (dir != null && dir.isDirectory()) {
  31. String[] children = dir.list();
  32. for (int i = 0; i < children.length; i++) {
  33. boolean success = deleteDir(new File(dir, children[i]));
  34. if (!success) {
  35. return false;
  36. }
  37. }
  38. }
  39. return dir.delete();
  40. }
  41. // 获取文件大小
  42. // Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
  43. // Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
  44. private static long getFolderSize(File file) {
  45. long size = 0;
  46. try {
  47. File[] fileList = file.listFiles();
  48. for (int i = 0; i < fileList.length; i++) {
  49. // 如果下面还有文件
  50. if (fileList[i].isDirectory()) {
  51. size = size + getFolderSize(fileList[i]);
  52. } else {
  53. size = size + fileList[i].length();
  54. }
  55. }
  56. } catch (Exception e) {
  57. e.printStackTrace();
  58. }
  59. return size;
  60. }
  61. /**
  62. * 格式化单位
  63. */
  64. private static String getFormatSize(double size) {
  65. double kiloByte = size / 1024;
  66. if (kiloByte < 1) {
  67. // return size + "Byte";
  68. return "0K";
  69. }
  70. double megaByte = kiloByte / 1024;
  71. if (megaByte < 1) {
  72. BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
  73. return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
  74. .toPlainString() + "K";
  75. }
  76. double gigaByte = megaByte / 1024;
  77. if (gigaByte < 1) {
  78. BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
  79. return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
  80. .toPlainString() + "M";
  81. }
  82. double teraBytes = gigaByte / 1024;
  83. if (teraBytes < 1) {
  84. BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
  85. return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
  86. .toPlainString() + "GB";
  87. }
  88. BigDecimal result4 = new BigDecimal(teraBytes);
  89. return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
  90. + "TB";
  91. }
  92. }