標籤:android environment statfs 儲存空間
最近想起Android開發的知識,好久沒有使用了,都忘得差不多了,今天查看了一會資料往回撿撿,順便寫下來協助一下需要的同學。
首先講述一下Environment與StatFs這兩個類,然後介紹它們的詳細使用方法。
1、 Environment 類:
Environment 是一個提供訪問環境變數的類。
Environment 包含常量:
MEDIA_BAD_REMOVAL
解釋:返回getExternalStorageState() ,表明SDCard 被卸載前己被移除
MEDIA_CHECKING
解釋:返回getExternalStorageState() ,表明對象正在磁碟檢查。
MEDIA_MOUNTED
解釋:返回getExternalStorageState() ,表明對象是否存在並具有讀/寫入權限
MEDIA_MOUNTED_READ_ONLY
解釋:返回getExternalStorageState() ,表明對象許可權為唯讀
MEDIA_NOFS
解釋:返回getExternalStorageState() ,表明對象為空白或正在使用不受支援的檔案系統。
MEDIA_REMOVED
解釋:返回getExternalStorageState() ,如果不存在 SDCard 返回
MEDIA_SHARED
解釋:返回getExternalStorageState() ,如果 SDCard 未安裝 ,並通過 USB 大型存放區共用 返回
MEDIA_UNMOUNTABLE
解釋:返回getExternalStorageState() ,返回 SDCard 不可被安裝 如果 SDCard 是存在但不可以被安裝
MEDIA_UNMOUNTED
解釋:返回getExternalStorageState() ,返回 SDCard 已卸掉如果 SDCard 是存在但是沒有被安裝
Environment 常用方法:
方法:getDataDirectory()
解釋:返回 File ,擷取 Android 資料目錄。
方法:getDownloadCacheDirectory()
解釋:返回 File ,擷取 Android 下載/緩衝內容目錄。
方法:getExternalStorageDirectory()
解釋:返回 File ,擷取外部儲存目錄即 SDCard
方法:getExternalStoragePublicDirectory(String type)
解釋:返回 File ,取一個高端的公用的外部儲存空間目錄來擺放某些類型的檔案
方法:getExternalStorageState()
解釋:返回 File ,擷取外部存放裝置的目前狀態
方法:getRootDirectory()
解釋:返回 File ,擷取 Android 的根目錄
2、StatFs 類:
StatFs 一個類比linux的df命令的一個類,獲得SD卡和手機記憶體的使用方式
StatFs 常用方法:
getAvailableBlocks()
解釋:返回 Int ,擷取當前可用的儲存空間
getBlockCount()
解釋:返回 Int ,擷取該地區可用的檔案系統數
getBlockSize()
解釋:返回 Int ,大小,以位元組為單位,一個檔案系統
getFreeBlocks()
解釋:返回 Int ,該塊地區剩餘的空間
restat(String path)
解釋:執行一個由該對象所引用的檔案系統
/**在隱藏檔時,為了保證有充足的剩餘空間大小,通常需要知道系統內部或者sdcard的儲存大小。下面提供一個工具類*/
package com.neverno.util;
import java.io.File;
import android.os.Environment;
import android.os.StatFs;
public class MemoryStatus {
static final int ERROR = -1;
/**
* 外部儲存是否可用
* @return
*/
static public boolean externalMemoryAvailable() {
return android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED);
}
/**
* 擷取手機內部可用空間大小
* @return
*/
static public long getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
/**
* 擷取手機內部空間大小
* @return
*/
static public long getTotalInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
/**
* 擷取手機外部可用空間大小
* @return
*/
static public long getAvailableExternalMemorySize() {
if (externalMemoryAvailable()) {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
} else {
return ERROR;
}
}
/**
* 擷取手機外部空間大小
* @return
*/
static public long getTotalExternalMemorySize() {
if (externalMemoryAvailable()) {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
} else {
return ERROR;
}
}
static public String formatSize(long size) {
String suffix = null;
if (size >= 1024) {
suffix = "KiB";
size /= 1024;
if (size >= 1024) {
suffix = "MiB";
size /= 1024;
}
}
StringBuilder resultBuffer = new StringBuilder(Long.toString(size));
int commaOffset = resultBuffer.length() - 3;
while (commaOffset > 0) {
resultBuffer.insert(commaOffset, ‘,‘);
commaOffset -= 3;
}
if (suffix != null)
resultBuffer.append(suffix);
return resultBuffer.toString();
}
}
Android中Environment與StatFs擷取系統/SDCard儲存空間大小