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

來源:互聯網
上載者:User

標籤:android   environment   statfs   儲存空間   

最近想起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();
    }
}



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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.