android.os下的statfs類主要用來擷取檔案系統的狀态,能夠擷取sd卡的大小和剩餘空間,擷取系統内部空間也就是/system的大小和剩餘空間等等。
看下讀取sd卡的:
java代碼
void readsdcard() {
string state = environment.getexternalstoragestate();
if (environment.media_mounted.equals(state)) {
file sdcarddir = environment.getexternalstoragedirectory();
statfs sf = new statfs(sdcarddir.getpath());
long blocksize = sf.getblocksize();
long blockcount = sf.getblockcount();
long availcount = sf.getavailableblocks();
log.d("" , "block大小:" + blocksize+ ",block數目:" + blockcount+ ",總大小:" +blocksize*blockcount/ 1024 + "kb" );
log.d("" , "可用的block數目::" + availcount+ ",剩餘空間:" + availcount*blocksize/ 1024 + "kb" );
}
}
void readsdcard() {
string state = environment.getexternalstoragestate();
if(environment.media_mounted.equals(state)) {
file sdcarddir = environment.getexternalstoragedirectory();
statfs sf = new statfs(sdcarddir.getpath());
long blocksize = sf.getblocksize();
long blockcount = sf.getblockcount();
long availcount = sf.getavailableblocks();
log.d("", "block大小:"+ blocksize+",block數目:"+ blockcount+",總大小:"+blocksize*blockcount/1024+"kb");
log.d("", "可用的block數目::"+ availcount+",剩餘空間:"+ availcount*blocksize/1024+"kb");
}
} 然後看下讀取系統内部空間的:
void readsystem() {
file root = environment.getrootdirectory();
statfs sf = new statfs(root.getpath());
long blocksize = sf.getblocksize();
long blockcount = sf.getblockcount();
long availcount = sf.getavailableblocks();
log.d("" , "block大小:" + blocksize+ ",block數目:" + blockcount+ ",總大小:" +blocksize*blockcount/ 1024 + "kb" );
log.d("" , "可用的block數目::" + availcount+ ",可用大小:" + availcount*blocksize/ 1024 + "kb" );
void readsystem() {
file root = environment.getrootdirectory();
statfs sf = new statfs(root.getpath());
long blocksize = sf.getblocksize();
long blockcount = sf.getblockcount();
long availcount = sf.getavailableblocks();
log.d("", "block大小:"+ blocksize+",block數目:"+ blockcount+",總大小:"+blocksize*blockcount/1024+"kb");
log.d("", "可用的block數目::"+ availcount+",可用大小:"+ availcount*blocksize/1024+"kb");
} statfs擷取的都是以block為機關的,這裡我解釋一下block的概念:
1.硬體上的 block size, 應該是"sector size",linux的扇區大小是512byte
2.有檔案系統的分區的block size, 是"block size",大小不一,可以用工具檢視
3.沒有檔案系統的分區的block size,也叫“block size”,大小指的是1024 byte
4.kernel buffer cache 的block size, 就是"block size",大部分pc是1024
5.磁盤分區的"cylinder size",用fdisk 可以檢視。
我們這裡的block size是第二種情況,一般sd卡都是fat32的檔案系統,block size是4096.
這樣就可以知道手機的内部存儲空間和sd卡存儲空間的總大小和可用大小了。