首页 > 代码库 > FileSizeUtil【获取文件夹或文件的大小】

FileSizeUtil【获取文件夹或文件的大小】

版权声明:本文为博主原创文章,未经博主允许不得转载。

前言

获取文件夹或者文件的大小,可以指定单位,也可以自动计算合适的单位值。

效果图

 技术分享

代码分析

常用的方法:

getFolderOrFileSize(String filePath,int sizeType)【获取指定文件或指定文件夹的的指定单位的大小】

getAutoFolderOrFileSize(String filePath)【自动计算指定文件或指定文件夹的大小】

使用步骤

一、项目组织结构图

技术分享

注意事项:

1、导入类文件后需要change包名以及重新import R文件路径

2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将FileSizeUtil文件复制到项目中

技术分享
package com.why.project.filesizeutildemo.utils;import android.util.Log;import java.io.File;import java.io.FileInputStream;import java.text.DecimalFormat;/** * @CreateBy HaiyuKing * @Used android 获取文件夹或文件的大小 以B、KB、MB、GB 为单位 * @参考资料 http://blog.csdn.net/jiaruihua_blog/article/details/13622939 */public class FileSizeUtil {    public static final int SIZETYPE_B = 1;//获取文件大小单位为B的double值    public static final int SIZETYPE_KB = 2;//获取文件大小单位为KB的double值    public static final int SIZETYPE_MB = 3;//获取文件大小单位为MB的double值    public static final int SIZETYPE_GB = 4;//获取文件大小单位为GB的double值    /**     * 获取指定文件或指定文件夹的的指定单位的大小     * @param filePath 文件路径     * @param sizeType 获取大小的类型1为B、2为KB、3为MB、4为GB     * @return double值的大小     */    public static double getFolderOrFileSize(String filePath,int sizeType){        File file=new File(filePath);        long blockSize=0;        try {            if(file.isDirectory()){                blockSize = getFolderSize(file);            }else{                blockSize = getFileSize(file);            }        } catch (Exception e) {            e.printStackTrace();            Log.e("获取文件大小","获取失败!");        }        return FormetFileSize(blockSize, sizeType);    }    /**     * 调用此方法自动计算指定文件或指定文件夹的大小     * @param filePath 文件路径     * @return 计算好的带B、KB、MB、GB的字符串     */    public static String getAutoFolderOrFileSize(String filePath){        File file=new File(filePath);        long blockSize=0;        try {            if(file.isDirectory()){                blockSize = getFolderSize(file);            }else{                blockSize = getFileSize(file);            }        } catch (Exception e) {            e.printStackTrace();            Log.e("获取文件大小","获取失败!");        }        return FormetFileSize(blockSize);    }    /**     * 获取指定文件的大小     * @param file     * @return     * @throws Exception     */    private static long getFileSize(File file) throws Exception    {        long size = 0;        if (file.exists()){            FileInputStream fis = null;            fis = new FileInputStream(file);            size = fis.available();            fis.close();        }        else{            file.createNewFile();            Log.e("获取文件大小","文件不存在!");        }                return size;    }    /**     * 获取指定文件夹的大小     * @param file     * @return     * @throws Exception     */    private static long getFolderSize(File file) throws Exception    {        long size = 0;        File flist[] = file.listFiles();        for (int i = 0; i < flist.length; i++){            if (flist[i].isDirectory()){                size = size + getFolderSize(flist[i]);            }            else{                size =size + getFileSize(flist[i]);            }        }        return size;    }    /**     * 转换文件大小     * @param fileSize     * @return     */    private static String FormetFileSize(long fileSize)    {        DecimalFormat df = new DecimalFormat("#.00");        String fileSizeString = "";        String wrongSize="0B";        if(fileSize==0){            return wrongSize;        }        if (fileSize < 1024){            fileSizeString = df.format((double) fileSize) + "B";        }        else if (fileSize < 1048576){            fileSizeString = df.format((double) fileSize / 1024) + "KB";        }        else if (fileSize < 1073741824){            fileSizeString = df.format((double) fileSize / 1048576) + "MB";        }        else{            fileSizeString = df.format((double) fileSize / 1073741824) + "GB";        }        return fileSizeString;    }    /**     * 转换文件大小,指定转换的类型     * @param fileSize     * @param sizeType      * @return     */    private static double FormetFileSize(long fileSize,int sizeType)    {        DecimalFormat df = new DecimalFormat("#.00");        double fileSizeLong = 0;        switch (sizeType) {        case SIZETYPE_B:            fileSizeLong=Double.valueOf(df.format((double) fileSize));            break;        case SIZETYPE_KB:            fileSizeLong=Double.valueOf(df.format((double) fileSize / 1024));            break;        case SIZETYPE_MB:            fileSizeLong=Double.valueOf(df.format((double) fileSize / 1048576));            break;        case SIZETYPE_GB:            fileSizeLong=Double.valueOf(df.format((double) fileSize / 1073741824));            break;        default:            break;        }        return fileSizeLong;    }}
FileSizeUtil

在AndroidManifest.xml中添加权限

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"          package="com.why.project.filesizeutildemo">    <!-- ======================(FileSizeUtil)========================== -->    <!-- 向SD卡读取数据权限 -->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity>    </application></manifest>

 添加运行时权限的处理(本demo中采用的是修改targetSDKVersion=22)

三、使用方法

package com.why.project.filesizeutildemo;import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.why.project.filesizeutildemo.utils.FileSizeUtil;import java.io.File;public class MainActivity extends AppCompatActivity {    private Button btn_getFolderSize;    private TextView tv_folderSize;    private Button btn_getFileSize;    private TextView tv_fileSize;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initViews();        initEvents();    }    private void initViews() {        btn_getFolderSize = (Button) findViewById(R.id.btn_getFolderSize);        tv_folderSize = (TextView) findViewById(R.id.tv_folderSize);        btn_getFileSize = (Button) findViewById(R.id.btn_getFileSize);        tv_fileSize = (TextView) findViewById(R.id.tv_fileSize);    }    private void initEvents() {        btn_getFolderSize.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String folderPath = Environment.getExternalStorageDirectory().toString() + File.separator + "intentFile";                Log.w("MainActivity","folderPath="+folderPath);                String folderSize = FileSizeUtil.getAutoFolderOrFileSize(folderPath);                tv_folderSize.setText(tv_folderSize.getText() + folderSize);            }        });        btn_getFileSize.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String filePath = Environment.getExternalStorageDirectory().toString() + File.separator + "intentFile" + File.separator + "imgdemo.jpg";                double fileSizeKB = FileSizeUtil.getFolderOrFileSize(filePath,FileSizeUtil.SIZETYPE_KB);                String fileSize = FileSizeUtil.getAutoFolderOrFileSize(filePath);                tv_fileSize.setText(tv_fileSize.getText() + "\n" +                                        "fileSizeKB=" + fileSizeKB + "\n" +                                        "fileSize=" + fileSize);            }        });    }}

混淆配置

参考资料

android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位

项目demo下载地址

https://github.com/haiyuKing/FileSizeUtilDemo

FileSizeUtil【获取文件夹或文件的大小】