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

前言

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

效果图

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

代码分析

常用的方法:

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

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

使用步骤

一、项目组织结构图

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

注意事项:

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

相关文章:

  • 2022-12-23
  • 2021-11-07
  • 2021-08-15
  • 2022-01-01
  • 2021-05-25
  • 2022-12-23
  • 2021-11-19
  • 2021-09-12
猜你喜欢
  • 2021-10-21
  • 2021-08-20
  • 2022-12-23
  • 2021-07-09
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案