下面列出了android.os.StatFs#getBlockSizeLong ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 获取对应路径的空间总大小
* @param path 路径
* @return 对应路径的空间总大小
*/
public static long getAllBlockSize(final String path) {
try {
// 获取路径的存储空间信息
StatFs statFs = new StatFs(path);
// 单个数据块的大小、数据块数量
long blockSize, blockCount;
// 版本兼容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = statFs.getBlockSizeLong();
blockCount = statFs.getBlockCountLong();
} else {
blockSize = statFs.getBlockSize();
blockCount = statFs.getBlockCount();
}
// 返回空间总大小
return (blockCount * blockSize);
} catch (Exception e) {
LogPrintUtils.eTag(TAG, e, "getAllBlockSize");
}
return 0L;
}
/**
* 获取对应路径已使用空间大小
* @param path 路径
* @return 对应路径已使用空间大小
*/
public static long getUsedBlocks(final String path) {
try {
// 获取路径的存储空间信息
StatFs statFs = new StatFs(path);
// 单个数据块的大小、数据块数量、空闲的数据块数量
long blockSize, blockCount, availableBlocks;
// 版本兼容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = statFs.getBlockSizeLong();
blockCount = statFs.getBlockCountLong();
availableBlocks = statFs.getAvailableBlocksLong();
} else {
blockSize = statFs.getBlockSize();
blockCount = statFs.getBlockCount();
availableBlocks = statFs.getAvailableBlocks();
}
// 返回已使用空间大小
return ((blockCount - availableBlocks) * blockSize);
} catch (Exception e) {
LogPrintUtils.eTag(TAG, e, "getUsedBlocks");
}
return 0L;
}
/**
* 获取SD卡信息
*
* @return SDCardInfo sd card info
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public static String getSDCardInfo() {
SDCardInfo sd = new SDCardInfo();
if (!isSDCardEnable()) return "sdcard unable!";
sd.isExist = true;
StatFs sf = new StatFs(Environment.getExternalStorageDirectory().getPath());
sd.totalBlocks = sf.getBlockCountLong();
sd.blockByteSize = sf.getBlockSizeLong();
sd.availableBlocks = sf.getAvailableBlocksLong();
sd.availableBytes = sf.getAvailableBytes();
sd.freeBlocks = sf.getFreeBlocksLong();
sd.freeBytes = sf.getFreeBytes();
sd.totalBytes = sf.getTotalBytes();
return sd.toString();
}
@SuppressLint("NewApi")
public static long getTotalSizeByPath(String path) {
StatFs stat = new StatFs(path);
long blockCount = 0;
long blockSize = 0;
long totalSize = 0;
try {
if (Build.VERSION.SDK_INT >= 19) {
blockCount = stat.getBlockCountLong();
blockSize = stat.getBlockSizeLong();
} else {
blockCount = stat.getBlockCount();
blockSize = stat.getBlockSize();
}
} catch (Exception e) {
LogUtils.logeForce(e);
}
totalSize = blockCount * blockSize;
return totalSize;
}
@Override public String getFreeDiskPercentage() {
File rootDirectory = Environment.getRootDirectory();
StatFs fileSystemData = new StatFs(rootDirectory.getPath());
long blockSize;
long totalSize;
long availableSize;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = fileSystemData.getBlockSizeLong();
totalSize = fileSystemData.getBlockCountLong() * blockSize;
availableSize = fileSystemData.getAvailableBlocksLong() * blockSize;
} else {
blockSize = fileSystemData.getBlockSize();
totalSize = fileSystemData.getBlockCount() * blockSize;
availableSize = fileSystemData.getAvailableBlocks() * blockSize;
}
long freeDiskPercentage = availableSize * 100 / totalSize;
return String.valueOf(freeDiskPercentage);
}
private void calculateExternalSpace() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File sdcardDir = Environment.getExternalStorageDirectory();
StatFs sf = new StatFs(sdcardDir.getPath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
mExternalBlockSize = sf.getBlockSizeLong();
mExternalBlockCount = sf.getBlockCountLong();
mExternalAvailableBlocks = sf.getAvailableBlocksLong();
} else {
mExternalBlockSize = sf.getBlockSize();
mExternalBlockCount = sf.getBlockCount();
mExternalAvailableBlocks = sf.getAvailableBlocks();
}
}
}
public long getUsedSpace(String dir, SizeUnit sizeUnit) {
StatFs statFs = new StatFs(dir);
long availableBlocks;
long blockSize;
long totalBlocks;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
availableBlocks = statFs.getAvailableBlocks();
blockSize = statFs.getBlockSize();
totalBlocks = statFs.getBlockCount();
} else {
availableBlocks = statFs.getAvailableBlocksLong();
blockSize = statFs.getBlockSizeLong();
totalBlocks = statFs.getBlockCountLong();
}
long usedBytes = totalBlocks * blockSize - availableBlocks * blockSize;
return usedBytes / sizeUnit.inBytes();
}
@SuppressWarnings("ObsoleteSdkInt")
private long getBlockSizeLong(final @NotNull StatFs stat) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
return stat.getBlockSizeLong();
}
return getBlockSizeDep(stat);
}
private long getBlockSize() {
if (mBlockSize == 0L) {
File chatLogDir = mServerConfigManager.getChatLogDir();
if (!chatLogDir.exists())
return 0L;
StatFs statFs = new StatFs(chatLogDir.getAbsolutePath());
if (Build.VERSION.SDK_INT >= 18)
mBlockSize = statFs.getBlockSizeLong();
else
mBlockSize = statFs.getBlockSize();
}
return mBlockSize;
}
/**
* Gets available internal memory size.
*
* @return the available internal memory size
*/
public final long getAvailableInternalMemorySize() {
File path = getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize;
long availableBlocks;
if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = stat.getBlockSizeLong();
availableBlocks = stat.getAvailableBlocksLong();
} else {
blockSize = stat.getBlockSize();
availableBlocks = stat.getAvailableBlocks();
}
return availableBlocks * blockSize;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public static long getAvailableSize() {
if (isMounted()) {
StatFs stat = new StatFs(getSDCardPath());
// 获得可用的块的数量
long count = stat.getAvailableBlocksLong();
long size = stat.getBlockSizeLong();
return count * size;
}
return 0;
}
public static long getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long blocksAvailable = stat.getAvailableBlocksLong();
int size = 1048576; // blocksize of 1 Mb
return ((blocksAvailable * blockSize) / size);
}
/**
* Get available size of SD card.
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public static long getAvailableSize(String path) {
try {
File base = new File(path);
StatFs stat = new StatFs(base.getPath());
return stat.getBlockSizeLong() * stat.getAvailableBlocksLong();
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/**
* 返回对应路径的空间大小信息
* @param path 路径
* @return long[], 0 = 总空间大小, 1 = 空闲空间大小, 2 = 已使用空间大小
*/
public static long[] getBlockSizeInfos(final String path) {
try {
// 获取路径的存储空间信息
StatFs statFs = new StatFs(path);
// 单个数据块的大小、数据块数量、空闲的数据块数量
long blockSize, blockCount, availableBlocks;
// 版本兼容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = statFs.getBlockSizeLong();
blockCount = statFs.getBlockCountLong();
availableBlocks = statFs.getAvailableBlocksLong();
} else {
blockSize = statFs.getBlockSize();
blockCount = statFs.getBlockCount();
availableBlocks = statFs.getAvailableBlocks();
}
// 计算空间信息
long[] blocks = new long[3];
blocks[0] = blockSize * blockCount;
blocks[1] = blockSize * availableBlocks;
blocks[2] = ((blockCount - availableBlocks) * blockSize);
// 返回空间信息
return blocks;
} catch (Exception e) {
LogPrintUtils.eTag(TAG, e, "getBlockSizeInfos");
}
return null;
}
/**
* See {@link android.os.StatFs#getBlockSize}.
*/
@SuppressWarnings("deprecation")
public static long getBlockSize(StatFs statFs) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
return statFs.getBlockSizeLong();
} else {
return statFs.getBlockSize();
}
}
private void calculateInternalSpace() {
File root = Environment.getRootDirectory();
StatFs sf = new StatFs(root.getPath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
mInternalBlockSize = sf.getBlockSizeLong();
mInternalBlockCount = sf.getBlockCountLong();
mInternalAvailableBlocks = sf.getAvailableBlocksLong();
} else {
mInternalBlockSize = sf.getBlockSize();
mInternalBlockCount = sf.getBlockCount();
mInternalAvailableBlocks = sf.getAvailableBlocks();
}
}
/**
* 获取手机内存存储可用空间
*
* @return
*/
public static long getPhoneAvailableSize()
{
if (!checkSdCard())
{
File path = Environment.getDataDirectory();
StatFs mStatFs = new StatFs(path.getPath());
long blockSizeLong = mStatFs.getBlockSizeLong();
long availableBlocksLong = mStatFs.getAvailableBlocksLong();
return blockSizeLong * availableBlocksLong;
} else
return getSDcardAvailableSize();
}
private void refreshStorageStatus() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getPath());
long blockSize = statFs.getBlockSizeLong();
long totalBlocks = statFs.getBlockCountLong();
long availableBlocks = statFs.getAvailableBlocksLong();
String totalSize = Formatter.formatFileSize(this, blockSize * totalBlocks);
String availableSize = Formatter.formatFileSize(this, blockSize * availableBlocks);
textProgressBar.setTextAndProgress("内置存储可用:" + availableSize + "/共:" + totalSize, (int) ((float) availableBlocks / totalBlocks * 100));
} else {
textProgressBar.setTextAndProgress("内置存储不可用", 0);
}
}
@SuppressWarnings("deprecation")
public static long getFreeMemory() {
StatFs stat = new StatFs(Environment.getDataDirectory().getPath());
if (hasJellyBeanMR2())
return stat.getAvailableBlocksLong() * stat.getBlockSizeLong();
else
return stat.getAvailableBlocks() * stat.getBlockSize();
}
/**
* Calculates total space on disk
* @param external If true will query external disk, otherwise will query internal disk.
* @return Number of mega bytes on disk.
*/
public static int totalSpaceGibi(boolean external)
{
StatFs statFs = getStats(external);
long total = (statFs.getBlockCountLong() * statFs.getBlockSizeLong()) / GIBIBYTE;
Log.d(TAG, "Total disk space: " + String.valueOf(total));
return (int) total;
}