如何获得缓存目录的确切大小:android
需要:我只是想得到我手机上安装的每个应用程序被占用的缓存大小 我的做法:如何获得缓存目录的确切大小:android,android,caching,Android,Caching,需要:我只是想得到我手机上安装的每个应用程序被占用的缓存大小 我的做法: PackageManager packageManager = getPackageManager(); List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); for (ApplicationInfo packageInfo : packages) {
PackageManager packageManager = getPackageManager();
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages)
{
try
{
Context mContext = createPackageContext(packageInfo.packageName, CONTEXT_IGNORE_SECURITY);
File cacheDirectory = mContext.getCacheDir();
if(cacheDirectory==null)
{
cacheArrayList.add("0");
}
else
{
cacheArrayList.add(String.valueOf(cacheDirectory.length()/1024));
}
}
catch (NameNotFoundException e)
{
e.printStackTrace();
}
}
PackageManager-PackageManager=getPackageManager();
List packages=packageManager.getInstalledApplications(packageManager.GET_元数据);
对于(ApplicationInfo packageInfo:packages)
{
尝试
{
Context mContext=createPackageContext(packageInfo.packageName,Context\u IGNORE\u SECURITY);
文件cacheDirectory=mContext.getCacheDir();
if(cacheDirectory==null)
{
cacheArrayList.add(“0”);
}
其他的
{
add(String.valueOf(cacheDirectory.length()/1024));
}
}
catch(nameNotFounde异常)
{
e、 printStackTrace();
}
}
结果:如果目录为空,则返回0(作为条件)。但如果目录存在,它总是返回4KB。我通过以下过程签出了应用程序的缓存:
设置:->应用程序:->应用程序名称
但我在那里找到了0B
为什么会这样?有人能解释吗?如何获得缓存的确切大小?对目录调用length并不总是返回正确的大小。您可以尝试迭代文件列表并将所有文件大小相加,以获得总目录大小 像这样:
long size = 0;
File[] files = cacheDirectory.listFiles();
for (File f:files) {
size = size+f.length();
}
您将从此函数中获取cachesize
public void clearCache() {
//clear memory cache
long size = 0;
cache.clear();
//clear SD cache
File[] files = cacheDir.listFiles();
for (File f:files) {
size = size+f.length();
// f.delete();
}
}
这对我来说更准确:
private void initializeCache() {
long size = 0;
size += getDirSize(this.getCacheDir());
size += getDirSize(this.getExternalCacheDir());
((TextView) findViewById(R.id.yourTextView)).setText(readableFileSize(size));
}
public long getDirSize(File dir){
long size = 0;
for (File file : dir.listFiles()) {
if (file != null && file.isDirectory()) {
size += getDirSize(file);
} else if (file != null && file.isFile()) {
size += file.length();
}
}
return size;
}
public static String readableFileSize(long size) {
if (size <= 0) return "0 Bytes";
final String[] units = new String[]{"Bytes", "kB", "MB", "GB", "TB"};
int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
private void initializeCache(){
长尺寸=0;
size+=getDirSize(this.getCacheDir());
size+=getDirSize(this.getExternalCacheDir());
((TextView)findviewbyd(R.id.yourTextView)).setText(readableFileSize(size));
}
公共长getDirSize(文件目录){
长尺寸=0;
对于(文件:dir.listFiles()){
if(file!=null&&file.isDirectory()){
size+=getDirSize(文件);
}else if(file!=null&&file.isFile()){
size+=file.length();
}
}
返回大小;
}
公共静态字符串可读文件大小(长){
如果(尺寸)这个答案更完整,更通用,所以它可以在任何地方使用。