package com.qihoo360.byod.utils;
import java.io.File;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
/**
* 本应用数据清除管理器
*
*/
public class DataCleanManager {
private static final String TAG = "DataCleanManager";
/**
* get app private data dir: /data/data/PackageName/, eg /data/data/com.xxx.xxx/
* @param context
* @return
*/
public static String getDataDir(Context context) {
return "/data/data/" + context.getPackageName() + "/";
//return context.getFilesDir().getParent();
}
/** * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * @param context */
public static void cleanInternalCache(Context context) {
deleteFilesByDirectory(getDataDir(context) + "/cache/"/*context.getCacheDir()*/);
}
/** * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * @param context */
public static void cleanDatabases(Context context) {
deleteFilesByDirectory(new File(getDataDir(context) + "/databases"));
}
/**
* * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * @param
* context
*/
public static void cleanSharedPreference(Context context) {
deleteFilesByDirectory(new File(getDataDir(context) + "/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()*/getDataDir(context) + "/files/");
deleteFile(new File(getDataDir(context) + "/files/icon1.jpg"));
}
/** * 清除下的内容 * * @param context */
public static void cleanExternalCacheDir(Context context) {
deleteFilesByDirectory(context.getExternalCacheDir());
}
/**
* * 清除外部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 filePaths */
public static void cleanApplicationData(Context context, String... filePaths) {
cleanInternalCache(context);
cleanExternalCache(context);
cleanExternalCacheDir(context);
cleanDatabases(context);
cleanSharedPreference(context);
cleanFiles(context);
if (filePaths != null && filePaths.length > 0) {
for (String filePath : filePaths) {
cleanCustomCache(filePath);
}
}
}
private static int deleteFilesByDirectory(String directoryPath) {
return deleteFilesByDirectory(new File(directoryPath));
}
/** * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * @param directory */
private static int deleteFilesByDirectory(File directory) {
try {
int count = 0;
int delCount = 0;
if (directory != null && directory.exists()) {
if (directory.isDirectory()) {
File[] files = directory.listFiles();
if (files == null) return -1;
count = files.length;
if (count > 0) {
for (File file : files) {
if (file.isFile()) {
boolean deleted = deleteFile(file);
if (deleted) {
delCount++;
}
} else {
int count2 = deleteFilesByDirectory(file);
count += count2;
Log.w(TAG, "Delete directory by recursion: " + file + ", count2= " + count2);
}
}
} else {
boolean del = deleteFile(directory);
}
} else {
count = 1;
boolean del = deleteFile(directory);
}
}
Log.i(TAG, "deleteFilesByDirectory: " + directory + ", files count= " + count);
return count;
} catch (Exception e) {
Log.w(TAG, "deleteFilesByDirectory: " + e.getMessage());
return 0;
}
}
private static boolean deleteFile(File file) {
boolean deleted = false;
if (file != null && file.exists() && file.isFile()) {
deleted = file.delete();
if (deleted) {
Log.i(TAG, "Deleted file: " + file);
} else {
Log.w(TAG, "Deleted FAILED file: " + file);
}
} else {
Log.w(TAG, "Not exists or invalid real file: " + file);
}
return deleted;
}
import java.io.File;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
/**
* 本应用数据清除管理器
* <p> 描 述: 主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清除自定义目录
* java文件下载地址:http://download.csdn.net/download/zhanghao_hulk/9969484
*
*/
public class DataCleanManager {
private static final String TAG = "DataCleanManager";
/**
* get app private data dir: /data/data/PackageName/, eg /data/data/com.xxx.xxx/
* @param context
* @return
*/
public static String getDataDir(Context context) {
return "/data/data/" + context.getPackageName() + "/";
//return context.getFilesDir().getParent();
}
/** * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * @param context */
public static void cleanInternalCache(Context context) {
deleteFilesByDirectory(getDataDir(context) + "/cache/"/*context.getCacheDir()*/);
}
/** * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * @param context */
public static void cleanDatabases(Context context) {
deleteFilesByDirectory(new File(getDataDir(context) + "/databases"));
}
/**
* * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * @param
* context
*/
public static void cleanSharedPreference(Context context) {
deleteFilesByDirectory(new File(getDataDir(context) + "/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()*/getDataDir(context) + "/files/");
deleteFile(new File(getDataDir(context) + "/files/icon1.jpg"));
}
/** * 清除下的内容 * * @param context */
public static void cleanExternalCacheDir(Context context) {
deleteFilesByDirectory(context.getExternalCacheDir());
}
/**
* * 清除外部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 filePaths */
public static void cleanApplicationData(Context context, String... filePaths) {
cleanInternalCache(context);
cleanExternalCache(context);
cleanExternalCacheDir(context);
cleanDatabases(context);
cleanSharedPreference(context);
cleanFiles(context);
if (filePaths != null && filePaths.length > 0) {
for (String filePath : filePaths) {
cleanCustomCache(filePath);
}
}
}
private static int deleteFilesByDirectory(String directoryPath) {
return deleteFilesByDirectory(new File(directoryPath));
}
/** * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * @param directory */
private static int deleteFilesByDirectory(File directory) {
try {
int count = 0;
int delCount = 0;
if (directory != null && directory.exists()) {
if (directory.isDirectory()) {
File[] files = directory.listFiles();
if (files == null) return -1;
count = files.length;
if (count > 0) {
for (File file : files) {
if (file.isFile()) {
boolean deleted = deleteFile(file);
if (deleted) {
delCount++;
}
} else {
int count2 = deleteFilesByDirectory(file);
count += count2;
Log.w(TAG, "Delete directory by recursion: " + file + ", count2= " + count2);
}
}
} else {
boolean del = deleteFile(directory);
}
} else {
count = 1;
boolean del = deleteFile(directory);
}
}
Log.i(TAG, "deleteFilesByDirectory: " + directory + ", files count= " + count);
return count;
} catch (Exception e) {
Log.w(TAG, "deleteFilesByDirectory: " + e.getMessage());
return 0;
}
}
private static boolean deleteFile(File file) {
boolean deleted = false;
if (file != null && file.exists() && file.isFile()) {
deleted = file.delete();
if (deleted) {
Log.i(TAG, "Deleted file: " + file);
} else {
Log.w(TAG, "Deleted FAILED file: " + file);
}
} else {
Log.w(TAG, "Not exists or invalid real file: " + file);
}
return deleted;
}
}