獲取文件夾大小,文件大小,文件個數

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) + "毫秒...");
    }*/
}

我清除緩存的部分java

//點擊清理緩存 根據用戶選擇 刪除相關的文件數據
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這個類裏面的,這個類用來更新管理的。android

相關文章
相關標籤/搜索