您好,登錄后才能下訂單哦!
知識點:
內部存儲空間獲取總大小和可用大小;
sdcard存儲空間獲取總大小和可用大小;
新名詞記錄{StatFs:描述文件系統信息的類}
概覽
在開發中,我們或多或少都會用到存儲空間進行存儲數據。移動設備上可以有兩種的存儲方式:手機內部空間和sdcard外部空間。對于要使用存儲空間,要使用哪一個?如何判斷是否有足夠的空間?sdcard是否掛載?等等諸多問題就來了。
對于設備內部存儲空間來說,是一定會存在的。如果使用內部存儲空間,我們需要做的是判斷內部存儲空間是否有足夠大的可用空間給我們使用。現在的移動設備,手機廠商已經將內部存儲做得很大很大了,一般來說用戶都足夠用了。
對于sdcard,這個是用戶外部選擇性的進行存儲空間擴展的,事實上不一定會有sdcard。尤其是在現在Android移動設備廠商提供的內部存儲空間越來越大,起步的已經都是32G了,更大的可以去到128G,所以用戶可能就不需要再進行sdcard的擴展了。但是,設備內部存儲空間小,需要用到外部存儲空間的情況還是可能會出現的。而且可以知道主流的APP對于一些非私密的數據,例如圖片,歌曲以及下載的更新包等,都會選擇放置在sdcard里,以減少占用內部存儲空間。
說了這么多,我們還是有必要對上面兩種存儲空間的使用作一個說明,如何獲取存儲空間是否可用,可用空間是否足夠大等問題。
內部存儲空間
我們知道,存儲硬件的空間是按著區塊來劃分的,每個區塊有固定的大小。存儲設備的總大小=區塊大小*區塊數量。通過StatFs類,我們可以獲取到總的區塊,可用區塊和每個區塊的字節大小等信息。
具體看代碼:
/** * 獲取手機內部空間總大小 * * @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 getAvailableInternalMemorySize() { File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); //獲取可用區塊數量 long availableBlocks = stat.getAvailableBlocks(); return availableBlocks * blockSize; }
用以上兩個方法,就可以獲得內部存儲空間總大小和可用大小了。
sdcard外部存儲空間
/** * 判斷SD卡是否可用 * * @return true : 可用<br>false : 不可用 */ public static boolean isSDCardEnable() { return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); } /** * 獲取手機外部總空間大小 * * @return 總大小,字節為單位 */ static public long getTotalExternalMemorySize() { if (isSDCardEnable()) { //獲取SDCard根目錄 File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long totalBlocks = stat.getBlockCount(); return totalBlocks * blockSize; } else { return -1; } } /** * 獲取SD卡剩余空間 * * @return SD卡剩余空間 */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static String getFreeSpace() { if (!isSDCardEnable()) return "sdcard unable!"; StatFs stat = new StatFs(getSDCardPath()); long blockSize, availableBlocks; availableBlocks = stat.getAvailableBlocksLong(); blockSize = stat.getBlockSizeLong(); long size = availableBlocks * blockSize / 1024L; return String.valueOf(size); }
統一描述sdcard的信息
/** * 獲取SD卡信息 * * @return SDCardInfo */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static String getSDCardInfo() { SDCardInfo sd = new SDCardInfo(); if (!isSDCardEnable()) return "sdcard unable!"; sd.isExist = true; StatFs sf = new StatFs(Environment.getExternalStorageDirectory().getPath()); sd.totalBlocks = sf.getBlockCountLong(); sd.blockByteSize = sf.getBlockSizeLong(); sd.availableBlocks = sf.getAvailableBlocksLong(); sd.availableBytes = sf.getAvailableBytes(); sd.freeBlocks = sf.getFreeBlocksLong(); sd.freeBytes = sf.getFreeBytes(); sd.totalBytes = sf.getTotalBytes(); return sd.toString(); } public static class SDCardInfo { boolean isExist; long totalBlocks; long freeBlocks; long availableBlocks; long blockByteSize; long totalBytes; long freeBytes; long availableBytes; @Override public String toString() { return "isExist=" + isExist + "\ntotalBlocks=" + totalBlocks + "\nfreeBlocks=" + freeBlocks + "\navailableBlocks=" + availableBlocks + "\nblockByteSize=" + blockByteSize + "\ntotalBytes=" + totalBytes + "\nfreeBytes=" + freeBytes + "\navailableBytes=" + availableBytes; } }
總結
以上就是分別獲取兩個不同的存儲空間總大小和可用大小的示例。希望對大家有用。
如有任何問題,請及時與我聯系,謝謝!
這篇Android之獲取手機內部及sdcard存儲空間的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。