版权声明:本文为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() + "\n" +
"fileSizeKB=" + fileSizeKB + "\n" +
"fileSize=" + fileSize);
}
});
}
}

混淆配置

参考资料

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

项目demo下载地址

https://github.com/haiyuKing/FileSizeUtilDemo

FileSizeUtil【获取文件夹或文件的大小】的更多相关文章

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

    android 获取文件夹.文件的大小 以B.KB.MB.GB 为单位   public class FileSizeUtil { public static final int SIZETYPE_B ...

  2. C#_IO操作_查询指定文件夹下的每个子文件夹占空间的大小

    1.前言 磁盘内存用掉太多,想查那些文件夹占的内存比较大,再找出没有用的文件去删除. 2.代码 static void Main(string[] args) { while (true) { //指 ...

  3. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  4. 背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件

    [源码下载] 背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件 作者:webabcd 介绍背水一战 Windows 10 之 ...

  5. php获取指定文件夹中文件名称

    /** * php获取指定文件夹中文件名称 * @author jackie <2018.10.10> */ public static function getFileName($fil ...

  6. IO流-获取指定目录下文件夹和文件对象【File类】

    一.运用File类实现获取指定目录下文件夹和文件对象 1.File类 2.方法: 获取文件绝对路径 :getAbsolutePath 案例: import java.io.File; /** * 获取 ...

  7. python文件夹遍历,文件操作,获取文件修改创建时间

    在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回当前 ...

  8. C#操作文件夹及文件的方法的使用

    本文收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件.指定文件夹下面的所有内容copy到目标文件夹下面.指定文件夹下面的所有内容 ...

  9. 遍历、显示ftp下的文件夹和文件信息

    今天做了通过ftp读取ftp根目录下的所有文件夹和文件,嵌套文件夹查询,总共用到了一下代码: 1.FtpFile_Directory package com.hs.dts.web.ftp; impor ...

随机推荐

  1. 第一天 Java语言概述

    一.什么是软件 软件就是按照特定的顺序把数据和指令组合在一起,能够完成相应功能的程序. 软件分为两种: 系统软件:专门用户运行其他程序的平台.比如Linux.Windows.MAC等 应用软件:完成相 ...

  2. mutex.go

    package} } ) ].GetResponseRange().Kvs[].CreateRevision )     return nil } func (m *Mutex) IsOwner() ...

  3. SSIS 调试和故障排除

    SSIS内置的调试工具是非常完备的,主要是设置断点和查看变量值,这是在Package的设计阶段可以使用的工具,在Package部署到服务器之后,用户还可以使用事件处理程序以实现Package出错的自我 ...

  4. BZOJ_2212_[Poi2011]Tree Rotations_线段树合并

    BZOJ_2212_[Poi2011]Tree Rotations_线段树合并 Description Byteasar the gardener is growing a rare tree cal ...

  5. Spring mvc 下载文件处理

    @RequestMapping(value = "downFile") public void downFile(HttpServletResponse response, Str ...

  6. 【深度学习篇】---CNN和RNN结合与对比,实例讲解

    一.前述 CNN和RNN几乎占据着深度学习的半壁江山,所以本文将着重讲解CNN+RNN的各种组合方式,以及CNN和RNN的对比. 二.CNN与RNN对比 1.CNN卷积神经网络与RNN递归神经网络直观 ...

  7. C++线程安全日志库-Win32接口实现

    分享一个C++日志库,使用Win32接口编写,而且是线程安全的日志库.比较简单,只有2个文件,容易上手,使用起来也很简单 头文件 如下是日志库的头文件,接口看似很多,但是使用起来最常用的也就那么几个 ...

  8. Java集合详解7:HashSet,TreeSet与LinkedHashSet

    今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合 ...

  9. 通过改进团队流程最大限度发挥Scrum的优势

    团队如何最大限度地发挥Scrum和敏捷的优势? 回想一下,Scrum团队在Scrum的框架内定义了自己的流程.这其中包括方法.工具和互动以及如何履行Scrum角色的职责.如何使用工件和事件等. 如何确 ...

  10. 8天入门docker系列 —— 第二天 通过一个aspnetcore程序加深对容器的理解

    我们知道容器是一个打包了应用和相关依赖的盒子,那怎么去操控这个盒子呢? 这一篇我通过一个简单的aspnetcore程序来加深对盒子的理解,使用之前先 安装一下Docker的环境. 一:Docker的安 ...