當我想看到我的Android我通常會看兩個內部存儲和外部存儲(SD卡)的總自由空間。Android文件系統和自由空間的混亂
什麼我在一些SO答案讀我會覺得內部存儲的數據(可用空間,可用空間等),這樣的基礎:
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();
//Logging added to make sure I am not going mad
Log.v(TAG,"Available Blocks: "+Long.toString(availableBlocks));
Log.v(TAG,"Total Blocks: "+Long.toString(totalBlocks));
Log.v(TAG,"Block size: "+Long.toString(blockSize));
如果我想獲得外部存儲(SD我的Android設備我的卡)會像這樣運行代碼:
FilePath path = Environment..getExternalStorageDirectory();
StatFs stat = new StatFs(Environment.getPath());
this.extblockSize = stat.getBlockSize();
long exttotalBlocks = stat.getBlockCount();
long extavailableBlocks = stat.getAvailableBlocks();
//More logging to ensure I am not mad!
Log.v(TAG,"EXTAvailable Blocks: "+Long.toString(extavailableBlocks));
Log.v(TAG,"EXTTotal Blocks: "+Long.toString(exttotalBlocks));
Log.v(TAG,"EXTBlock size: "+Long.toString(extblockSize));
難道我說得這是你如何在Android設備上讀取外部和內部存儲?
假設我是對的,我有一些問題。當我在Samsung Galaxy SIII上運行上面的代碼時,上面的代碼片段返回的內存量完全相同。現在我知道我的三星有大約25GB的內部存儲器,我有一個4GB的SD卡。
然而,這兩段代碼返回25GB總和這是正確的,23GB免費這也是正確的但只限於內部存儲。我只是爲了我的生活無法弄清楚如何讀取SD卡的的文件系統信息。請參閱下面的日誌輸出以獲取正在輸出的實際值。
01-14 20:49:25.485: V/VLRApplication(730): Available Blocks: 6031460
01-14 20:49:25.485: V/VLRApplication(730): Total Blocks: 6702651
01-14 20:49:25.485: V/VLRApplication(730): Block size: 4096
01-14 20:49:25.485: V/VLRApplication(730): EXTAvailable Blocks: 6031460
01-14 20:49:25.485: V/VLRApplication(730): EXTTotal Blocks: 6702651
01-14 20:49:25.485: V/VLRApplication(730): EXTBlock size: 4096
所以我必須誤解這個概念。有人能爲我澄清這一點嗎?撥打Environment.getExternalStorageDirectory()
的電話是否設置了SD卡的路徑?只是在一個側面說明,我還沒有在AVD仿真設備中嘗試過。
我完全不確定,但我認爲有些設備只有一個存儲設備,這是外部的。例如,我非常肯定這就是Nexus 7的設計。 –