版权声明:本文为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 为单位