国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android之獲取手機(jī)內(nèi)部及sdcard存儲(chǔ)空間的方法

2019-12-12 00:37:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

知識(shí)點(diǎn):

內(nèi)部存儲(chǔ)空間獲取總大小和可用大??;

sdcard存儲(chǔ)空間獲取總大小和可用大??;

新名詞記錄{StatFs:描述文件系統(tǒng)信息的類(lèi)}

概覽

在開(kāi)發(fā)中,我們或多或少都會(huì)用到存儲(chǔ)空間進(jìn)行存儲(chǔ)數(shù)據(jù)。移動(dòng)設(shè)備上可以有兩種的存儲(chǔ)方式:手機(jī)內(nèi)部空間和sdcard外部空間。對(duì)于要使用存儲(chǔ)空間,要使用哪一個(gè)?如何判斷是否有足夠的空間?sdcard是否掛載?等等諸多問(wèn)題就來(lái)了。

對(duì)于設(shè)備內(nèi)部存儲(chǔ)空間來(lái)說(shuō),是一定會(huì)存在的。如果使用內(nèi)部存儲(chǔ)空間,我們需要做的是判斷內(nèi)部存儲(chǔ)空間是否有足夠大的可用空間給我們使用?,F(xiàn)在的移動(dòng)設(shè)備,手機(jī)廠商已經(jīng)將內(nèi)部存儲(chǔ)做得很大很大了,一般來(lái)說(shuō)用戶都足夠用了。

對(duì)于sdcard,這個(gè)是用戶外部選擇性的進(jìn)行存儲(chǔ)空間擴(kuò)展的,事實(shí)上不一定會(huì)有sdcard。尤其是在現(xiàn)在Android移動(dòng)設(shè)備廠商提供的內(nèi)部存儲(chǔ)空間越來(lái)越大,起步的已經(jīng)都是32G了,更大的可以去到128G,所以用戶可能就不需要再進(jìn)行sdcard的擴(kuò)展了。但是,設(shè)備內(nèi)部存儲(chǔ)空間小,需要用到外部存儲(chǔ)空間的情況還是可能會(huì)出現(xiàn)的。而且可以知道主流的APP對(duì)于一些非私密的數(shù)據(jù),例如圖片,歌曲以及下載的更新包等,都會(huì)選擇放置在sdcard里,以減少占用內(nèi)部存儲(chǔ)空間。

說(shuō)了這么多,我們還是有必要對(duì)上面兩種存儲(chǔ)空間的使用作一個(gè)說(shuō)明,如何獲取存儲(chǔ)空間是否可用,可用空間是否足夠大等問(wèn)題。

內(nèi)部存儲(chǔ)空間

我們知道,存儲(chǔ)硬件的空間是按著區(qū)塊來(lái)劃分的,每個(gè)區(qū)塊有固定的大小。存儲(chǔ)設(shè)備的總大小=區(qū)塊大小*區(qū)塊數(shù)量。通過(guò)StatFs類(lèi),我們可以獲取到總的區(qū)塊,可用區(qū)塊和每個(gè)區(qū)塊的字節(jié)大小等信息。

具體看代碼:

/**   * 獲取手機(jī)內(nèi)部空間總大小   *   * @return 大小,字節(jié)為單位   */  static public long getTotalInternalMemorySize() {    //獲取內(nèi)部存儲(chǔ)根目錄    File path = Environment.getDataDirectory();    //系統(tǒng)的空間描述類(lèi)    StatFs stat = new StatFs(path.getPath());    //每個(gè)區(qū)塊占字節(jié)數(shù)    long blockSize = stat.getBlockSize();    //區(qū)塊總數(shù)    long totalBlocks = stat.getBlockCount();    return totalBlocks * blockSize;  }  /**   * 獲取手機(jī)內(nèi)部可用空間大小   *   * @return 大小,字節(jié)為單位   */  static public long getAvailableInternalMemorySize() {    File path = Environment.getDataDirectory();    StatFs stat = new StatFs(path.getPath());    long blockSize = stat.getBlockSize();    //獲取可用區(qū)塊數(shù)量    long availableBlocks = stat.getAvailableBlocks();    return availableBlocks * blockSize;  }

用以上兩個(gè)方法,就可以獲得內(nèi)部存儲(chǔ)空間總大小和可用大小了。

sdcard外部存儲(chǔ)空間

  /**   * 判斷SD卡是否可用   *   * @return true : 可用<br>false : 不可用   */  public static boolean isSDCardEnable() {    return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());  }/**   * 獲取手機(jī)外部總空間大小   *   * @return 總大小,字節(jié)為單位   */  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);  }

統(tǒng)一描述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;    }  }

總結(jié)

以上就是分別獲取兩個(gè)不同的存儲(chǔ)空間總大小和可用大小的示例。希望對(duì)大家有用。

如有任何問(wèn)題,請(qǐng)及時(shí)與我聯(lián)系,謝謝!

這篇Android之獲取手機(jī)內(nèi)部及sdcard存儲(chǔ)空間的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洮南市| 扎囊县| 抚州市| 大荔县| 龙里县| 卢龙县| 大庆市| 砀山县| 沅江市| 彝良县| 广汉市| 苏尼特左旗| 长沙县| 老河口市| 海原县| 无锡市| 九寨沟县| 新闻| 锦州市| 伽师县| 阿巴嘎旗| 广元市| 芮城县| 赤峰市| 马龙县| 离岛区| 惠水县| 浏阳市| 杂多县| 杭锦后旗| 无极县| 隆尧县| 密云县| 华亭县| 陆良县| 锦州市| 通州市| 确山县| 通海县| 云安县| 资源县|