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


    版权声明:本文为HaiyuKing原创文章,转载请注明出处!

    前言

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

    效果图

     

    代码分析

    常用的方法:

    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() + "
    " +
                                            "fileSizeKB=" + fileSizeKB + "
    " +
                                            "fileSize=" + fileSize);
                }
            });
        }
    }

    混淆配置

    参考资料

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

    项目demo下载地址

    https://github.com/haiyuKing/FileSizeUtilDemo

  • 相关阅读:
    01 Java基础第一天
    2019牛客暑期多校训练营(第七场)J A+B problem
    SDNU 1477.矩形面积交(思维)
    SDNU 1194.传纸条(DP)&& 1032.机器人
    SDNU 1280.就问你慌不慌(高精度)
    POJ 2528 Mayor's posters(线段树+离散化)
    HDU 1698 Just a Hook(线段树区间赋值)
    POJ 3468 A Simple Problem with Integers (区间加区间查找)
    HDU 1754 I Hate It(线段树单点更改、区间查找最大值)
    HDU 1166 敌兵布阵(线段树单点加区间查询)
  • 原文地址:https://www.cnblogs.com/whycxb/p/7136293.html
Copyright © 2020-2023  润新知