Android:StatFs類 獲取系統/sdcard存儲空間信息


在存儲文件時,為了保證有充足的存儲空間大小,通常需要知道系統內部或者sdcard的剩余存儲空間大小,這里就需要用到StatFs類。

1. 判斷 SDCard 是否存在,並且是否具有可讀寫權限 

/**

* 外部存儲是否可用 (存在且具有讀寫權限)

* @return

*/ 

staticpublicboolean isExternalStorageAvailable() { 

    return Environment.getExternalStorageState().equals( 

            Environment.MEDIA_MOUNTED); 

     /**
     * 外部存儲是否可用 (存在且具有讀寫權限)
     * @return
     */
    static public boolean isExternalStorageAvailable() {
        return Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED);
    }

2.獲取手機系統可用空間大小

 

/**

* 獲取手機內部可用空間大小

* @return

*/ 

staticpubliclong 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 getAvailableInternalMemorySize() {
        File path = Environment.getDataDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();
        long availableBlocks = stat.getAvailableBlocks();
        return availableBlocks * blockSize;
    }

 

 

3.獲取手機內部總空間大小

/**

* 獲取手機內部空間大小

* @return

*/ 

staticpubliclong getTotalInternalMemorySize() { 

    File path = Environment.getDataDirectory();//Gets the Android data directory 

    StatFs stat = new StatFs(path.getPath()); 

    long blockSize = stat.getBlockSize();      //每個block 占字節數 

    long totalBlocks = stat.getBlockCount();   //block總數 

    return totalBlocks * blockSize; 

    /**
     * 獲取手機內部空間大小
     * @return
     */
    static public long getTotalInternalMemorySize() {
        File path = Environment.getDataDirectory();//Gets the Android data directory
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();      //每個block 占字節數
        long totalBlocks = stat.getBlockCount();   //block總數
        return totalBlocks * blockSize;
    }

4.獲取手機外部可用空間大小、獲取手機外部總空間大小

/**

    * 獲取手機外部可用空間大小

    * @return

    */ 

   staticpubliclong getAvailableExternalMemorySize() { 

       if (isExternalStorageAvailable()) { 

           File path = Environment.getExternalStorageDirectory();//獲取SDCard根目錄 

           StatFs stat = new StatFs(path.getPath()); 

           long blockSize = stat.getBlockSize(); 

           long availableBlocks = stat.getAvailableBlocks(); 

           return availableBlocks * blockSize; 

       } else

           return -1

       } 

   } 

 

   /**

    * 獲取手機外部總空間大小

    * @return

    */ 

   staticpubliclong getTotalExternalMemorySize() { 

       if (isExternalStorageAvailable()) { 

           File path = Environment.getExternalStorageDirectory(); //獲取SDCard根目錄 

           StatFs stat = new StatFs(path.getPath()); 

           long blockSize = stat.getBlockSize(); 

           long totalBlocks = stat.getBlockCount(); 

           return totalBlocks * blockSize; 

       } else

           return -1

       } 

   } 

 /**
     * 獲取手機外部可用空間大小
     * @return
     */
    static public long getAvailableExternalMemorySize() {
        if (isExternalStorageAvailable()) {
            File path = Environment.getExternalStorageDirectory();//獲取SDCard根目錄
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long availableBlocks = stat.getAvailableBlocks();
            return availableBlocks * blockSize;
        } else {
            return -1;
        }
    }

    /**
     * 獲取手機外部總空間大小
     * @return
     */
    static public long getTotalExternalMemorySize() {
        if (isExternalStorageAvailable()) {
            File path = Environment.getExternalStorageDirectory(); //獲取SDCard根目錄
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long totalBlocks = stat.getBlockCount();
            return totalBlocks * blockSize;
        } else {
            return -1;
        }
    }

 

 

注意: 訪問SDCard進行文件讀寫時:

 

在AndroidManifest.xml中加入訪問SDCard的權限如下:

<!-- 在SDCard中創建與刪除文件權限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<!-- 往SDCard寫入數據權限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

接着我們在使用SDcard進行讀寫的時候 會用到Environment類下面的幾個靜態方法:

1:getDataDirectory()         獲取到Android中的data數據目錄

2:getDownloadCacheDirectory() 獲取到下載的緩存目錄

3:getExternalStorageDirectory()     獲取到外部存儲的目錄 一般指SDcard

4:getExternalStorageState()           獲取外部設置的當前狀態 一般指SDcard,

android系統中對於外部設置的狀態,比較常用的是 MEDIA_MOUNTED(SDcard存在且可以進行讀寫) MEDIA_MOUNTED_READ_ONLY (SDcard存在,只可以進行讀操作) 當然還有其他的一些狀態,可以在文檔中進行查找到。

5:getRootDirectory()                   獲取到Android Root路徑

6:isExternalStorageEmulated()    返回Boolean值判斷外部設置是否有效

7:isExternalStorageRemovable() 返回Boolean值,判斷外部設置是否可以移除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM