下面列出了android.os.StatFs#getAvailableBlocks ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static void queryWithStatFs() {
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getPath());
//存储块
long blockCount = statFs.getBlockCount();
//块大小
long blockSize = statFs.getBlockSize();
//可用块数量
long availableCount = statFs.getAvailableBlocks();
//剩余块数量,注:这个包含保留块(including reserved blocks)即应用无法使用的空间
long freeBlocks = statFs.getFreeBlocks();
//level 18
// long totalSize = statFs.getTotalBytes();
// long availableSize = statFs.getAvailableBytes();
Log.d(TAG, "=========");
Log.d(TAG, "total = " + getUnit(blockSize * blockCount, 1024));
Log.d(TAG, "available = " + getUnit(blockSize * availableCount, 1024));
Log.d(TAG, "free = " + getUnit(blockSize * freeBlocks, 1024));
}
/**
* 获取目录剩余空间
* @param directoryPath
* @return
*/
private long getResidualSpace(String directoryPath) {
try {
StatFs sf = new StatFs(directoryPath);
long blockSize = sf.getBlockSize();
long availCount = sf.getAvailableBlocks();
long availCountByte = availCount * blockSize;
return availCountByte;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
public static long readSystemAvailableSize() {
String path = "/data";
StatFs sf = new StatFs(path);
long blockSize = sf.getBlockSize();
Log.d("block size", "block size: " + blockSize);
//long blockCount = sf.getBlockCount();
//Log.d("available count", "available count: " + sf.getAvailableBlocks());
long availCount = sf.getAvailableBlocks();
Log.d("available count", "available count: " + availCount);
return blockSize * availCount/1024;
}
/**
* See {@link android.os.StatFs#getAvailableBlocksLong}.
*/
@SuppressWarnings("deprecation")
public static long getAvailableBlocks(StatFs statFs) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
return statFs.getAvailableBlocksLong();
} else {
return statFs.getAvailableBlocks();
}
}
/**
* 获取SD卡剩余空间的大小
*
* @return long SD卡剩余空间的大小(单位:byte)
*/
public static long getSDSize()
{
final String str = Environment.getExternalStorageDirectory().getPath();
final StatFs localStatFs = new StatFs(str);
final long blockSize = localStatFs.getBlockSize();
return localStatFs.getAvailableBlocks() * blockSize;
}
public static long getUsedSpaceInBytesOnInternalStorage()
{
long usedSpace;
StatFs stat = new StatFs(Environment.getDataDirectory().getPath());
usedSpace = ((long) stat.getBlockCount() - stat.getAvailableBlocks())
* (long) stat.getBlockSize();
return usedSpace;
}
public long getFreeSpace(String dir, SizeUnit sizeUnit) {
StatFs statFs = new StatFs(dir);
long availableBlocks;
long blockSize;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
availableBlocks = statFs.getAvailableBlocks();
blockSize = statFs.getBlockSize();
} else {
availableBlocks = statFs.getAvailableBlocksLong();
blockSize = statFs.getBlockSizeLong();
}
long freeBytes = availableBlocks * blockSize;
return freeBytes / sizeUnit.inBytes();
}
/**
* Given a path return the number of free KB
*
* @param path to the file system
* @return free space in KB
*/
private static long freeSpaceCalculation(String path) {
StatFs stat = new StatFs(path);
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize / 1024;
}
/**
* @return Number of bytes available on external storage
*/
public static long getExternalAvailableSpaceInBytes() {
long availableSpace = -1L;
try {
StatFs stat = new StatFs(Environment.getExternalStorageDirectory()
.getPath());
availableSpace = (long) stat.getAvailableBlocks()
* (long) stat.getBlockSize();
} catch (Exception e) {
e.printStackTrace();
}
return availableSpace;
}
/**
* 获取某个目录可用大小.
*/
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
public static long getDirSize(String path) {
StatFs stat = new StatFs(path);
long blockSize, availableBlocks;
if (Build.VERSION.SDK_INT >= 18) {
blockSize = stat.getBlockSizeLong();
availableBlocks = stat.getAvailableBlocksLong();
} else {
blockSize = stat.getBlockSize();
availableBlocks = stat.getAvailableBlocks();
}
return availableBlocks * blockSize;
}
private String getRootSubtitle(String path) {
StatFs stat = new StatFs(path);
long total = (long) stat.getBlockCount() * (long) stat.getBlockSize();
long free = (long) stat.getAvailableBlocks()
* (long) stat.getBlockSize();
if (total == 0) {
return "";
}
return "Free " + formatFileSize(free) + " of " + formatFileSize(total);
}
/**
* Check how much usable space is available at a given path.
*
* @param path The path to check
* @return The space available in bytes
*/
@TargetApi(Build.VERSION_CODES.GINGERBREAD) public static long getUsableSpace(File path) {
if (AndroidVersionUtil.hasGingerbread()) {
return path.getUsableSpace();
}
final StatFs stats = new StatFs(path.getPath());
return (long) stats.getBlockSize() * (long) stats.getAvailableBlocks();
}
public static long getAvailableSpaceInBytesOnInternalStorage()
{
long availableSpace;
StatFs stat = new StatFs(Environment.getDataDirectory().getPath());
availableSpace = (long) stat.getAvailableBlocks()
* (long) stat.getBlockSize();
return availableSpace;
}
/**
* 获得sd卡剩余容量,即可用大小
*
* @return
*/
public static String getSDAvailableSize(Context ontext) {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(ontext, blockSize * availableBlocks);
}
private String getRomAvailableSize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(this, blockSize * availableBlocks);
}
/**
* Given a path return the number of free KB
*
* @param path to the file system
* @return free space in KB
*/
private static long freeSpaceCalculation(String path) {
StatFs stat = new StatFs(path);
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize / 1024;
}
/**
* Check how much usable space is available at a given path.
*
* @param path The path to check
* @return The space available in bytes
*/
@TargetApi(VERSION_CODES.GINGERBREAD)
public static long getUsableSpace(File path) {
if (Utils.hasGingerbread()) {
return path.getUsableSpace();
}
final StatFs stats = new StatFs(path.getPath());
return (long) stats.getBlockSize() * (long) stats.getAvailableBlocks();
}
/**
* Returns the available space in megabytes.
* @return
*/
public static int getAvailableSpaceInMegaBytes() {
int availableSpace = 0;
try {
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
availableSpace = stat.getAvailableBlocks() * stat.getBlockSize() / 1048576;
} catch (Exception e) {
e.printStackTrace();
}
return availableSpace;
}
/**
* Get the free space on the internal storage device
*
* @return The free space in byte
*/
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public static double getFreeSpaceInternal() {
StatFs stat = new StatFs(App.getApp().getFilesDir().getPath());
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
return (double) stat.getAvailableBlocks() * (double) stat.getBlockSize();
} else {
return (double) stat.getAvailableBlocksLong() * (double) stat.getBlockSizeLong();
}
}
public static int freeSpaceOnSd() {
StatFs stat = new StatFs(Environment.getExternalStorageDirectory()
.getPath());
double sdFreeMB = ((double) stat.getAvailableBlocks() * (double) stat
.getBlockSize()) / MB;
return (int) sdFreeMB;
}