您的位置:首页 > 其它

获取文件夹大小,文件大小,文件个数

2015-10-15 00:00 330 查看
package com.rb.huaihua.util.clear;

import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;

/**
* Created by sunfish on 2015/10/15.
* 获取文件大小的类 使用时先创建该对象然后调用其中的方法
*/
public class GetFileSize {
/**
* 取得文件大小
* @param file
* @return
* @throws Exception
*/
public long getFileSizes(File file) throws Exception{
long s=0;
if (file.exists()) {
FileInputStream fis = null;
fis = new FileInputStream(file);
s= fis.available();
} else {
file.createNewFile();
System.out.println("文件不存在");
}
return s;
}
/**
* 取得文件夹大小 // 递归
* @param f
* @return
* @throws Exception
*/
public long getFileSize(File f)throws Exception
{
long size = 0;
File flist[] = f.listFiles();
for (int i = 0; i < flist.length; i++)
{
if (flist[i].isDirectory()) {
size = size + getFileSize(flist[i]);
} else {
size = size + flist[i].length();
}
}
return size;
}

/**
* //转换文件大小
* @param fileS
* @return
*/
public String FormetFileSize(long fileS) {
DecimalFormat df = new DecimalFormat("0.00");
String fileSizeString = "";
if (fileS < 1024) {
fileSizeString = df.format((double) fileS) + "B";
} else if (fileS < 1048576) {
fileSizeString = df.format((double) fileS / 1024) + "K";
} else if (fileS < 1073741824) {
fileSizeString = df.format((double) fileS / 1048576) + "M";
} else {
fileSizeString = df.format((double) fileS / 1073741824) + "G";
}
return fileSizeString;
}

/**
* 递归求取目录文件个数
* @param f
* @return
*/
public long getlist(File f){
long size = 0;
File flist[] = f.listFiles();
size=flist.length;
for (int i = 0; i < flist.length; i++) {
if (flist[i].isDirectory()) {
size = size + getlist(flist[i]);
size--;
}
}
return size;
}

//传入路径 获取文件或者文件夹大小 我自己写的方便下面的清除缓存里面获得缓存的大小
//返回的l表示:下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数
public long getCacheSize(File file){
GetFileSize g = new GetFileSize();
long l = 0;//文件或者文件夹所含文件的长度
try {
if (file.isDirectory()){
l = g.getFileSize(file);
}else{
l = g.getFileSizes(file);
}
}catch (Exception e){
e.printStackTrace();
}
return l;
}
//这个是main函数入口 不会使用可以看看这个
/*public static void main(String args[])
{
GetFileSize g = new GetFileSize();
long startTime = System.currentTimeMillis();
try
{
long l = 0;
String path = "C:\\WINDOWS";
File ff = new File(path);
if (ff.isDirectory()) { //如果路径是文件夹的时候
System.out.println("文件个数           " + g.getlist(ff));
System.out.println("目录");
l = g.getFileSize(ff);
System.out.println(path + "目录的大小为:" + g.FormetFileSize(l));
} else {
System.out.println("     文件个数           1");
System.out.println("文件");
l = g.getFileSizes(ff);
System.out.println(path + "文件的大小为:" + g.FormetFileSize(l));
}

} catch (Exception e)
{
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("总共花费时间为:" + (endTime - startTime) + "毫秒...");
}*/
}

我清除缓存的部分

//点击清理缓存 根据用户选择 删除相关的文件数据
else if (v.getId() == R.id.llClear) {
//清理缓存
//获取缓存的大小
String size = getCacheSize();
// 构造对话框
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.clear);
builder.setMessage(getString(R.string.is_delete) + "\n" + "(缓存大小:" + size+")");
//按对话框以外的地方不起作用。按返回键也不起作用
builder.setCancelable(false);
//确认清除
builder.setPositiveButton(R.string.delete_yes, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
dialog.dismiss();
// 删除文件
doClear();
UIHelp.showToast(getActivity(), getString(R.string.clearDone));
}
});
// 取消清除
builder.setNegativeButton(R.string.delete_no, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
dialog.dismiss();
}
});
Dialog noticeDialog = builder.create();
noticeDialog.show();
getCacheSize()方法和
doClear()方法:
//获得缓存大小的方法
private String getCacheSize() {
String size = "";
long l = 0;
GetFileSize g = new GetFileSize();
l = g.getCacheSize(getActivity().getCacheDir())
+g.getCacheSize(new File("/data/data/"+ getActivity().getPackageName() + "/databases"))
+g.getCacheSize(new File("/data/data/"+ getActivity().getPackageName() + "/shared_prefs"))
+g.getCacheSize(getActivity().getFilesDir())
+g.getCacheSize(new File(UpdateManager.mSavePath));
size = g.FormetFileSize(l);
return size;
}
//清除的方法 去工具类调用几个删除的方法
private void doClear() {
//清除本应用内部缓存(/data/data/com.xxx.xxx/cache)
ClearCache.cleanInternalCache(getActivity());

//清除本应用所有数据库(/data/data/com.xxx.xxx/cache)
ClearCache.cleanDatabases(getActivity());

//清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs)
ClearCache.cleanSharedPreference(getActivity());
/*
//按名字清除本应用数据库
ClearCache.cleanDatabaseByName(getActivity(),"数据库名称");
*/

//清除/data/data/com.xxx.xxx/files下的内容
ClearCache.cleanFiles(getActivity());

//清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache)
ClearCache.cleanExternalCache(getActivity());

//清除自定义路径下的文件
ClearCache.cleanCustomCache(UpdateManager.mSavePath);
}


UpdateManager.mSavePath是一个常量,
String = Environment.() + File.++File.++File.;

是我写在UpdateManager这个类里面的,这个类用来更新管理的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: