在存儲檔案時,為了保證有充足的存儲空間大小,通常需要知道系統内部或者sdcard的剩餘存儲空間大小,這裡就需要用到StatFs類。
1. 判斷 SDCard 是否存在,并且是否具有可讀寫權限
/**
* 外部存儲是否可用 (存在且具有讀寫權限)
* @return
*/
staticpublicboolean isExternalStorageAvailable() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
}
2.擷取手機系統可用空間大小
* 擷取手機内部可用空間大小
staticpubliclong getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
3.擷取手機内部總空間大小
* 擷取手機内部空間大小
staticpubliclong getTotalInternalMemorySize() {
File path = Environment.getDataDirectory();//Gets the Android data directory
long blockSize = stat.getBlockSize(); //每個block 占位元組數
long totalBlocks = stat.getBlockCount(); //block總數
return totalBlocks * blockSize;
4.擷取手機外部可用空間大小、擷取手機外部總空間大小
* 擷取手機外部可用空間大小
* @return
*/
staticpubliclong getAvailableExternalMemorySize() {
if (isExternalStorageAvailable()) {
File path = Environment.getExternalStorageDirectory();//擷取SDCard根目錄
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
} else {
return -1;
}
}
/**
* 擷取手機外部總空間大小
staticpubliclong getTotalExternalMemorySize() {
File path = Environment.getExternalStorageDirectory(); //擷取SDCard根目錄
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
注意: 通路SDCard進行檔案讀寫時:
在AndroidManifest.xml中加入通路SDCard的權限如下:
<!-- 在SDCard中建立與删除檔案權限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入資料權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
接着我們在使用SDcard進行讀寫的時候 會用到Environment類下面的幾個靜态方法:
1:getDataDirectory() 擷取到Android中的data資料目錄
2:getDownloadCacheDirectory() 擷取到下載下傳的緩存目錄