近期想起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();
}
}
