DataCleanManager.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package com.edufound.reader.util;
  2. import java.io.File;
  3. import android.content.Context;
  4. import android.os.Environment;
  5. /**
  6. * 本应用数据清除管理器
  7. */
  8. public class DataCleanManager {
  9. /**
  10. * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache)
  11. *
  12. * @param context
  13. */
  14. public static void cleanInternalCache(Context context) {
  15. deleteFilesByDirectory(context.getCacheDir());
  16. }
  17. /**
  18. * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases)
  19. *
  20. * @param context
  21. */
  22. public static void cleanDatabases(Context context) {
  23. deleteFilesByDirectory(new File("/data/data/"
  24. + context.getPackageName() + "/databases"));
  25. }
  26. /**
  27. * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs)
  28. *
  29. * @param context
  30. */
  31. public static void cleanSharedPreference(Context context) {
  32. deleteFilesByDirectory(new File("/data/data/"
  33. + context.getPackageName() + "/shared_prefs"));
  34. }
  35. /**
  36. * 按名字清除本应用数据库
  37. *
  38. * @param context
  39. * @param dbName
  40. */
  41. public static void cleanDatabaseByName(Context context, String dbName) {
  42. context.deleteDatabase(dbName);
  43. }
  44. /**
  45. * 清除/data/data/com.xxx.xxx/files下的内容
  46. *
  47. * @param context
  48. */
  49. public static void cleanFiles(Context context) {
  50. deleteFilesByDirectory(context.getFilesDir());
  51. }
  52. /**
  53. * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache)
  54. *
  55. * @param context
  56. */
  57. public static void cleanExternalCache(Context context) {
  58. if (Environment.getExternalStorageState().equals(
  59. Environment.MEDIA_MOUNTED)) {
  60. deleteFilesByDirectory(context.getExternalCacheDir());
  61. }
  62. }
  63. /**
  64. * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除
  65. *
  66. * @param filePath
  67. */
  68. public static void cleanCustomCache(String filePath) {
  69. deleteFilesByDirectory(new File(filePath));
  70. }
  71. /**
  72. * 清除本应用所有的数据
  73. *
  74. * @param context
  75. * @param filepath
  76. */
  77. public static void cleanApplicationData(Context context, String... filepath) {
  78. cleanInternalCache(context);
  79. cleanExternalCache(context);
  80. cleanDatabases(context);
  81. cleanSharedPreference(context);
  82. cleanFiles(context);
  83. for (String filePath : filepath) {
  84. cleanCustomCache(filePath);
  85. }
  86. }
  87. /**
  88. * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理
  89. *
  90. * @param directory
  91. */
  92. private static void deleteFilesByDirectory(File directory) {
  93. if (directory != null && directory.exists() && directory.isDirectory()) {
  94. for (File item : directory.listFiles()) {
  95. item.delete();
  96. }
  97. }
  98. }
  99. /**
  100. * 删除文件夹下指定时间以前的所有文件
  101. *
  102. * @param folderPath 文件夹路径
  103. * @param msec 指定时间(毫秒),传 <=0 表示删除所有的文件
  104. */
  105. public static void delFileBeforeTime(String folderPath, long msec) {
  106. File folder = new File(folderPath);
  107. if (folder.exists() && folder.isDirectory()) {
  108. File[] files = folder.listFiles();
  109. if (files != null && files.length > 0) {
  110. for (File file : files) {
  111. if (file.isFile() && (msec <= 0 || file.lastModified() < msec)) {
  112. file.delete();
  113. // Logger.e("delete file :" + file.getAbsolutePath());
  114. } else if (file.isDirectory()) {
  115. delFileBeforeTime(file.getAbsolutePath(), msec);
  116. //这里如果文件夹已经为空,直接删除文件夹
  117. File[] folderFiles = file.listFiles();
  118. if (folderFiles == null || folderFiles.length == 0) {
  119. file.delete();
  120. // Logger.e("delete folder :" + file.getAbsolutePath());
  121. }
  122. }
  123. }
  124. }
  125. }
  126. }
  127. }