获取文件夹大小,文件大小,文件个数
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这个类里面的,这个类用来更新管理的。
相关文章推荐
- 安卓app更新
- Intellij IDEA如何使用Maven Tomcat Plugin运行web项目
- IntelliJ IDEA 14 注册码
- 波束形成
- 临时表空间
- vim 插件 添加总结
- java中的反射小运用
- 操作系统之Windows多线程简单学习
- 学习笔记1:java多线程机制之线程概念
- 学习笔记2:java中Thread类与线程的创建
- IOS 支付宝支付常见问题
- zabbix的action配置内容的配置
- 网站流量异常?天下数据来支招
- Mac下Maven环境配置
- 获取系统当前时间(精确到毫秒)
- 进程是否接受结束
- 文件是否增加了新的内容
- APP安装时间!(使用adb命令安装)
- Oracle 中的dual表
- mysql SQL设置外键约束ON DELETE CASCADE