Android中Environment與StatFs獲取系統/SDCard存儲空間大小


近期想起Android開發的知識。好久沒有使用了,都忘得幾乎相同了,今天查看了一會資料往回撿撿,順便寫下來幫助一下須要的同學。

首先講述一下Environment與StatFs這兩個類,然后介紹它們的具體用法。

1、 Environment 類: 
Environment 是一個提供訪問環境變量的類。

 
Environment 包括常量: 
MEDIA_BAD_REMOVAL 
解釋:返回getExternalStorageState() ,表明SDCard 被卸載前己被移除 
MEDIA_CHECKING 
解釋:返回getExternalStorageState() 。表明對象正在磁盤檢查。

 
MEDIA_MOUNTED 
解釋:返回getExternalStorageState() ,表明對象是否存在並具有讀/寫權限 
MEDIA_MOUNTED_READ_ONLY 
解釋:返回getExternalStorageState() 。表明對象權限為僅僅讀 
MEDIA_NOFS 
解釋:返回getExternalStorageState() ,表明對象為空白或正在使用不受支持的文件系統。 
MEDIA_REMOVED 
解釋:返回getExternalStorageState() ,假設不存在 SDCard 返回 
MEDIA_SHARED 
解釋:返回getExternalStorageState() 。假設 SDCard 未安裝 。並通過 USB 大容量存儲共享 返回 
MEDIA_UNMOUNTABLE 
解釋:返回getExternalStorageState() ,返回 SDCard 不可被安裝 假設 SDCard 是存在但不能夠被安裝 
MEDIA_UNMOUNTED 
解釋:返回getExternalStorageState() ,返回 SDCard 已卸掉假設 SDCard 是存在可是沒有被安裝 
Environment 經常用法: 
方法:getDataDirectory() 
解釋:返回 File ,獲取 Android 數據文件夾。 
方法:getDownloadCacheDirectory() 
解釋:返回 File 。獲取 Android 下載/緩存內容文件夾。

 
方法:getExternalStorageDirectory() 
解釋:返回 File ,獲取外部存儲文件夾即 SDCard 
方法:getExternalStoragePublicDirectory(String type) 
解釋:返回 File ,取一個高端的公用的外部存儲器文件夾來擺放某些類型的文件 
方法:getExternalStorageState() 
解釋:返回 File 。獲取外部存儲設備的當前狀態 
方法:getRootDirectory() 
解釋:返回 File ,獲取 Android 的根文件夾 
2、StatFs 類: 
StatFs 一個模擬linux的df命令的一個類,獲得SD卡和手機內存的使用情況 
StatFs 經常用法: 
getAvailableBlocks() 
解釋:返回 Int 。獲取當前可用的存儲空間 
getBlockCount() 
解釋:返回 Int ,獲取該區域可用的文件系統數 
getBlockSize() 
解釋:返回 Int ,大小,以字節為單位,一個文件系統 
getFreeBlocks() 
解釋:返回 Int ,該塊區域剩余的空間 
restat(String path) 
解釋:運行一個由該對象所引用的文件系統


/**在存儲文件時,為了保證有充足的剩余空間大小,通常須要知道系統內部或者sdcard的存儲大小。

以下提供一個工具類*/

package com.neverno.util;


import java.io.File;


import android.os.Environment;
import android.os.StatFs;


public class MemoryStatus {
    static final int ERROR = -1;


    /**
     * 外部存儲是否可用
     * @return
     */
    static public boolean externalMemoryAvailable() {
        return android.os.Environment.getExternalStorageState().equals(
                android.os.Environment.MEDIA_MOUNTED);
    }


    /**
     * 獲取手機內部可用空間大小
     * @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;
    }


    /**
     * 獲取手機內部空間大小
     * @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 getAvailableExternalMemorySize() {
        if (externalMemoryAvailable()) {
            File path = Environment.getExternalStorageDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long availableBlocks = stat.getAvailableBlocks();
            return availableBlocks * blockSize;
        } else {
            return ERROR;
        }
    }


    /**
     * 獲取手機外部空間大小
     * @return
     */
    static public long getTotalExternalMemorySize() {
        if (externalMemoryAvailable()) {
            File path = Environment.getExternalStorageDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long totalBlocks = stat.getBlockCount();
            return totalBlocks * blockSize;
        } else {
            return ERROR;
        }
    }


    static public String formatSize(long size) {
        String suffix = null;


        if (size >= 1024) {
            suffix = "KiB";
            size /= 1024;
            if (size >= 1024) {
                suffix = "MiB";
                size /= 1024;
            }
        }


        StringBuilder resultBuffer = new StringBuilder(Long.toString(size));
        int commaOffset = resultBuffer.length() - 3;
        while (commaOffset > 0) {
            resultBuffer.insert(commaOffset, ',');
            commaOffset -= 3;
        }


        if (suffix != null)
            resultBuffer.append(suffix);
        return resultBuffer.toString();
    }
}




免責聲明!

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



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