//帮助类 |
public class DataClearManager { |
/** |
* * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * |
* |
* @param context |
*/ |
public static void cleanInternalCache(Context context) { |
deleteFilesByDirectory(context.getCacheDir()); |
} |
/** |
* * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * |
* |
* @param context |
*/ |
public static void cleanDatabases(Context context) { |
deleteFilesByDirectory( new File( "/data/data/" |
+ context.getPackageName() + "/databases" )); |
} |
/** |
* * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * |
* |
* @param context |
*/ |
public static void cleanSharedPreference(Context context) { |
deleteFilesByDirectory( new File( "/data/data/" |
+ context.getPackageName() + "/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()); |
} |
/** |
* * 清除外部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 filepath |
*/ |
public static void cleanApplicationData(Context context, String... filepath) { |
cleanInternalCache(context); |
cleanExternalCache(context); |
cleanDatabases(context); |
cleanSharedPreference(context); |
cleanFiles(context); |
if (filepath == null ) { |
return ; |
} |
for (String filePath : filepath) { |
cleanCustomCache(filePath); |
} |
} |
/** |
* * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * |
* |
* @param directory |
*/ |
private static void deleteFilesByDirectory(File directory) { |
if (directory != null && directory.exists() && directory.isDirectory()) { |
for (File item : directory.listFiles()) { |
item.delete(); |
} |
} |
} |
// 获取文件 |
//Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据 |
//Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据 |
public static long getFolderSize(File file) throws Exception { |
long size = 0 ; |
try { |
File[] fileList = file.listFiles(); |
for ( int i = 0 ; i < fileList.length; i++) { |
// 如果下面还有文件 |
if (fileList[i].isDirectory()) { |
size = size + getFolderSize(fileList[i]); |
} else { |
size = size + fileList[i].length(); |
} |
} |
} catch (Exception e) { |
e.printStackTrace(); |
} |
return size; |
} |
/** |
* 删除指定目录下文件及目录 |
* |
* @param deleteThisPath |
* @return |
*/ |
public static void deleteFolderFile(String filePath, boolean deleteThisPath) { |
if (!TextUtils.isEmpty(filePath)) { |
try { |
File file = new File(filePath); |
if (file.isDirectory()) { // 如果下面还有文件 |
File files[] = file.listFiles(); |
for ( int i = 0 ; i < files.length; i++) { |
deleteFolderFile(files[i].getAbsolutePath(), true ); |
} |
} |
if (deleteThisPath) { |
if (!file.isDirectory()) { // 如果是文件,删除 |
file.delete(); |
} else { // 目录 |
if (file.listFiles().length == 0 ) { // 目录下没有文件或者目录,删除 |
file.delete(); |
} |
} |
} |
} catch (Exception e) { |
// TODO Auto-generated catch block |
e.printStackTrace(); |
} |
} |
} |
/** |
* 格式化单位 |
* |
* @param size |
* @return |
*/ |
public static String getFormatSize( double size) { |
double kiloByte = size / 1024 ; |
if (kiloByte < 1 ) { |
return size + "Byte" ; |
} |
double megaByte = kiloByte / 1024 ; |
if (megaByte < 1 ) { |
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); |
return result1.setScale( 2 , BigDecimal.ROUND_HALF_UP) |
.toPlainString() + "KB" ; |
} |
double gigaByte = megaByte / 1024 ; |
if (gigaByte < 1 ) { |
BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); |
return result2.setScale( 2 , BigDecimal.ROUND_HALF_UP) |
.toPlainString() + "MB" ; |
} |
double teraBytes = gigaByte / 1024 ; |
if (teraBytes < 1 ) { |
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); |
return result3.setScale( 2 , BigDecimal.ROUND_HALF_UP) |
.toPlainString() + "GB" ; |
} |
BigDecimal result4 = new BigDecimal(teraBytes); |
return result4.setScale( 2 , BigDecimal.ROUND_HALF_UP).toPlainString() |
+ "TB" ; |
} |
|
public static String getCacheSize(File file) throws Exception { |
return getFormatSize(getFolderSize(file)); |
} |
} |
//main方法 |
private TextView tv_cache_size; |
private long totalSize; |
private File cacheDir; |
@Override |
protected void onCreate(Bundle savedInstanceState) { |
super .onCreate(savedInstanceState); |
setContentView(R.layout.activity_main); |
tv_cache_size = (TextView) findViewById(R.id.tv_cache_size); |
//人为的写入缓存信息 |
cacheDir = getCacheDir(); |
writeCache(cacheDir); |
//显示当前缓存的大小 |
try { |
String size = DataClearManager.getCacheSize(cacheDir); |
tv_cache_size.setText(size); |
} catch (Exception e) { |
e.printStackTrace(); |
} |
// String size= getCacheSize(cacheDir); |
//缓存的大小-Cache Files |
//SD 当前放置缓存信息的目录 |
//所有的 都删除 |
//除了sharedPreference不删除 |
//获取当前文件夹下边所有文件的总大小 |
} |
/** |
* 获取缓存目录下的文件大小 |
* |
* @param cacheDir |
* @return |
*/ |
private String getCacheSize(File cacheDir) { |
//先置位 |
totalSize = 0 ; |
getCacheSizeMethod(cacheDir); |
//字节大小转成字符串 222222 12KB |
return formartSize(totalSize); |
} |
private String formartSize( long totalSize) { |
//小于1K |
if (totalSize < 1024 ) { |
return totalSize + "字节" ; |
} else { |
if ((totalSize / 1024 ) < 1024 ) { |
//kb范围以内 |
return totalSize / 1024 + "kb" ; |
} |
} |
return null ; |
} |
/** |
* 递归判断 |
* |
* @param cacheDir |
*/ |
private void getCacheSizeMethod(File cacheDir) { |
//获取当前所有的大小 |
File[] files = cacheDir.listFiles(); |
if (files != null ) { |
for (File file : files) { |
//是文件夹 |
if (file.isDirectory()) { |
//继续获取 |
getCacheSizeMethod(file); |
} else { |
//是文件---获取当前文件的大小 |
long length = file.length(); |
totalSize = totalSize + length; |
} |
} |
} |
} |
/** |
* 模拟存储缓存内容 |
* |
* @param cacheDir |
*/ |
private void writeCache(File cacheDir) { |
try { |
FileOutputStream fileOutputStream = new FileOutputStream( new File(cacheDir, "aaaa.txt" )); |
fileOutputStream.write( "dhoadhlfajdlsjddddddddddddddddddakfsavoannvkawodqqqqqfnawdnfawnvvnkanvaovnjaonvalvnakdjfnajdvjjdjjdjdjdjdjdjdjdjdjdjdjakdnfaeo;aeo" .getBytes()); |
fileOutputStream.close(); |
} catch (Exception e) { |
e.printStackTrace(); |
} |
File file = new File(cacheDir, "uuuu" ); |
if (!file.exists()) { |
file.mkdirs(); |
} |
try { |
FileOutputStream fileOutputStream = new FileOutputStream( new File(file, "bbbb.txt" )); |
fileOutputStream.write( "dhoadhlfajdlsjddddddddddddddddddakfsavoannvkawodfnawdnfawnvvnkanvaovnjaonvalvnakdjfnajdvjjdjjdjdjdjdjdjdjdjdjdjdjakdnfaeo;aeo" .getBytes()); |
fileOutputStream.close(); |
} catch (Exception e) { |
e.printStackTrace(); |
} |
} |
/** |
* 清除缓存 |
* @param view |
*/ |
public void clearCache(View view) { |
// clearAllCache(cacheDir); |
//判断是否删光 |
// String cacheSize = getCacheSize(cacheDir); |
//删除某个指定文件夹下的所有信息 |
DataClearManager.deleteFolderFile(cacheDir.getAbsolutePath(), true ); |
String size = null ; |
try { |
size = DataClearManager.getCacheSize(cacheDir); |
} catch (Exception e) { |
e.printStackTrace(); |
} |
tv_cache_size.setText(size); |
} |
private void clearAllCache(File cacheDir) { |
File[] files = cacheDir.listFiles(); |
//uuuu列出所有 bbb.txt |
for (File file : files) { |
if (file.isDirectory()) { |
//如果是文件夹,还是得判断 |
if (file.listFiles().length == 0 ) { |
//空文件夹 |
file.delete(); |
} else { |
//继续递归删除文件 |
clearAllCache(file); |
} |
} else { |
file.delete(); |
} |
} |
//删除uuu |
cacheDir.delete(); |
} |
//main布局 |
<TextView |
android:id= "@+id/tv_cache_size" |
android:layout_width= "match_parent" |
android:layout_height= "wrap_content" |
android:text= "当前缓存大小是:" /> |
<Button |
android:text= "清除缓存" |
android:onClick= "clearCache" |
android:layout_width= "match_parent" |
android:layout_height= "wrap_content" /> |
by: 发表于:2017-10-25 10:46:42 顶(0) | 踩(0) 回复
??
回复评论