本应用数据清除管理器

来源:互联网 发布:dns域名劫持工具 编辑:程序博客网 时间:2024/04/30 15:06
package com.qihoo360.byod.utils;


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

 * @author zhanghao
 *
 */
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;
}

}