Android 获取应用缓存大小与清除缓存的方法

如下所示:

package com.lucasey.littleant.frame;

/**
 * 文 件 名: FileCacheUtils.java
 * 描 述: 主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清除自定义目录
 * */ 

import java.io.File;
import java.math.BigDecimal; 

import android.content.Context;
import android.os.Environment;
import android.text.TextUtils; 

/** 本应用数据清除管理器 */
public class FileCacheUtils {
 /**
 * * 清除本应用内部缓存(/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
 * @param filepath
 * @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";
 } 

 /***
 * 获取应用缓存大小
 * @param file
 * @return
 * @throws Exception
 */
 public static String getCacheSize(File file) throws Exception {
 return getFormatSize(getFolderSize(file));
 } 

} 

以上这篇Android 获取应用缓存大小与清除缓存的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android中Glide获取缓存大小并清除缓存图片

    清除Glide缓存 Glide自带清除缓存的功能,分别对应Glide.get(context).clearDiskCache();(清除磁盘缓存)与Glide.get(context).clearMemory();(清除内存缓存)两个方法.其中clearDiskCache()方法必须运行在子线程,clearMemory()方法必须运行在主线程,这是这两个方法所强制要求的,详见源码. 获取Glide缓存空间大小 这个网上也有过一些介绍,但是给出的实现代码存在一些问题,我这里做了一定的修改.一下方法

  • Android获取应用程序大小的方法

    今天碰到个问题,想获取某个已安装的包的大小,没找到合适的方法.搜索了一下,发现PackageManager里面有个getPackageSizeInfo方法,可惜是hide的,而且它执行之后,会将结果回调给IPackageStatsObserver的onGetStatsCompleted方法.后来想直接计算/data/app和/system/app里面的apk大小,可是有时候会碰到权限问题,需要root才可以获取大小.        再后来,我想起系统的设置里面有一个应用程序管理,它里面列出了所有

  • Android 8.0的缓存大小和缓存清理接口方法

    获取缓存大小接口 主要这里的方法已经和7.0不兼容了. import android.app.usage.UsageStats; import android.app.usage.UsageStatsManager; import android.content.Context; import android.content.pm.PackageManager; import android.os.Process; import android.os.storage.StorageManager

  • Android获取应用程序大小和缓存的实例代码

    info package com.qin.appsize; import android.content.Intent; import android.graphics.drawable.Drawable; //Model类 ,用来存储应用程序信息 public class AppInfo { private String appLabel; //应用程序标签 private Drawable appIcon ; //应用程序图像 private Intent intent ; //启动应用程序

  • Android实现离线缓存的方法

    离线缓存就是在网络畅通的情况下将从服务器收到的数据保存到本地,当网络断开之后直接读取本地文件中的数据.如Json 数据缓存到本地,在断网的状态下启动APP时读取本地缓存数据显示在界面上,常用的APP(网易新闻.知乎等等)都是支持离线缓存的,这样带来了更好的用户体验. 如果能够在调用网络接口后自动缓存返回的Json数据,下次在断网状态下调用这个接口获取到缓存的Json数据的话,那该多好呢?Volley做到了这一点. 因此,今天这篇文章介绍的就是使用Volley自带的数据缓存,配合Universal

  • Android 获取应用缓存大小与清除缓存的方法

    如下所示: package com.lucasey.littleant.frame; /** * 文 件 名: FileCacheUtils.java * 描 述: 主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清除自定义目录 * */ import java.io.File; import java.math.BigDecimal; import android.content.Context; import android.os.Environm

  • IOS获取缓存文件的大小并清除缓存文件的方法

    移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage. 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅读类app的标配功能. 今天介绍的离线缓存功能的实现,主要分为缓存文件大小的获取.清除缓存文件的实现. 1. 获取缓存文件的大小 -( float )readCacheSize { NSString *cachePath = [NSSearchPathForDirectoriesInDomains (N

  • iOS开发之1行代码实现缓存计算及清除缓存

    话不多说,直接撸代码 // // gzhCache.h // cache // // Created by 郭志贺 on 2020/5/27. // Copyright © 2020 郭志贺. All rights reserved. // #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface gzhCache : NSObject /// 计算缓存大小 +(float)filePath; /// 清理缓存 +

  • Android获取SD卡路径及SDCard内存的方法

    本文实例讲述了Android获取SD卡路径及SDCard内存的方法.分享给大家供大家参考.具体分析如下: 昨天在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); 后来发现这样写虽然一般不会出错,但不是很好,因为不同相机,可能路径会出问题.较好的方法是通过Environment 来获取路径,最后给出一个例子,教你怎样获取SDCard 的内存,显示出来告诉用

  • android 获取手机内存及 内存可用空间的方法

    实例如下: //1.获取内存可用大小,内存路径 String path=Environment.getDataDirectory().getAbsolutePath(); String memoryAvaliSpace= Formatter.formatFileSize(this,getAvailSpace(path)); //2.获取sd卡可用大小,sd卡路径 String sdPath=Environment.getExternalStorageDirectory().getAbsolute

  • Android获取和读取短信验证码的实现方法

    现如今,验证码在Android的客户端还是非常普遍的.通过手机账号和验证码直接去注册应用账户的信息.很多应用都以这种方式来完成注册.简单的介绍一下吧. Android获取短信验证码还是比较简单的,通过Mob官网提供的ShareSDK,调用其中内部的方法,就可以获取到短信的验证码了.提供一下Mob的官网地址.http://www.mob.com/#/在官网上注册相关的信息之后,下载相关的jar包和.so文件就可以实现获取短信验证码了(2.0之前的版本都需要下载jar包和 .so文件,而现在的2.2

  • Android获取手机SIM卡运营商信息的方法

    本文实例讲述了Android获取手机SIM卡运营商信息的方法,对于Android程序设计有非常实用的价值.分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context context) { TelephonyManager tm = (TelephonyManager) context .getSystemServic

  • Android获取屏幕或View宽度和高度的方法

    本文实例讲述了Android获取屏幕或View宽度和高度的方法.分享给大家供大家参考,具体如下: 在Activity中获取屏幕的高度和宽度 Display display=getWindowManager().getDefaultDisplay(); int width=display.getWidth(); int height=display.getHeight(); 在重写ViewGroup中获取屏幕的有效宽度和高度在OnMesure方法中 protected void onMeasure

随机推荐