获取外部存储设备状态并计算其容量
利用该类,直接调用即可,totalSpace为容量,freeSpace为剩余容量,例 String temp=MyUtil.convertStorage(MyUtil.getSDCardInfo().totalSpace);
package com.lhy.filemanage.myutil;
import java.io.File;
import android.util.Log;
public class MyUtil
{
/**
* SD卡数据bean
*
* @author User
*/
public static class SDCardInfo
{
public long totalSpace;
public long freeSpace;
}
/**
* 获取SD数据
*/
public static SDCardInfo getSDCardInfo ()
{
// 获得外部存储设备的状态,首先判断外部存储设备是否存在
String sDCardString = android.os.Environment.getExternalStorageState();
if (sDCardString.equals(android.os.Environment.MEDIA_MOUNTED))
{
// 获得SD卡根路径
File pathFile = android.os.Environment.getExternalStorageDirectory();
try
{
// 获取StatFs对象
// Android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等。
// StatFs获取的都是以block【块】为单位的
android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());
// 获取SDCard上BLOCK总数
long nTotalBlocks = statfs.getBlockCount();
// 获取SDCard上每个block的SIZE
long nBlocSize = statfs.getBlockSize();
// 获取可供程序使用的Block的数量
long nAvailaBlock = statfs.getAvailableBlocks();
// 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块)
long nFreeBlock = statfs.getFreeBlocks();
SDCardInfo info = new SDCardInfo();
// 计算SDCard 总容量大小MB
info.totalSpace = nTotalBlocks * nBlocSize;
// 计算 SDCard 剩余大小MB
info.freeSpace = nAvailaBlock * nBlocSize;
return info;
}
catch (IllegalArgumentException e)
{
Log.e( "lhy", e.toString());
}
}
return null;
}
// storage, G M K B
public static String convertStorage ( long size)
{
long kb = 1024;
long mb = kb * 1024;
long gb = mb * 1024;
if (size > = gb)
{
return String.format( "%.1f GB", ( float) size / gb);
}
else if (size > = mb)
{
float f = ( float) size / mb;
return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
}
else if (size > = kb)
{
float f = ( float) size / kb;
return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
}
else
return String.format( "%d B", size);
}
}
import java.io.File;
import android.util.Log;
public class MyUtil
{
/**
* SD卡数据bean
*
* @author User
*/
public static class SDCardInfo
{
public long totalSpace;
public long freeSpace;
}
/**
* 获取SD数据
*/
public static SDCardInfo getSDCardInfo ()
{
// 获得外部存储设备的状态,首先判断外部存储设备是否存在
String sDCardString = android.os.Environment.getExternalStorageState();
if (sDCardString.equals(android.os.Environment.MEDIA_MOUNTED))
{
// 获得SD卡根路径
File pathFile = android.os.Environment.getExternalStorageDirectory();
try
{
// 获取StatFs对象
// Android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等。
// StatFs获取的都是以block【块】为单位的
android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());
// 获取SDCard上BLOCK总数
long nTotalBlocks = statfs.getBlockCount();
// 获取SDCard上每个block的SIZE
long nBlocSize = statfs.getBlockSize();
// 获取可供程序使用的Block的数量
long nAvailaBlock = statfs.getAvailableBlocks();
// 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块)
long nFreeBlock = statfs.getFreeBlocks();
SDCardInfo info = new SDCardInfo();
// 计算SDCard 总容量大小MB
info.totalSpace = nTotalBlocks * nBlocSize;
// 计算 SDCard 剩余大小MB
info.freeSpace = nAvailaBlock * nBlocSize;
return info;
}
catch (IllegalArgumentException e)
{
Log.e( "lhy", e.toString());
}
}
return null;
}
// storage, G M K B
public static String convertStorage ( long size)
{
long kb = 1024;
long mb = kb * 1024;
long gb = mb * 1024;
if (size > = gb)
{
return String.format( "%.1f GB", ( float) size / gb);
}
else if (size > = mb)
{
float f = ( float) size / mb;
return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
}
else if (size > = kb)
{
float f = ( float) size / kb;
return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
}
else
return String.format( "%d B", size);
}
}