1. 程式人生 > >Android SDCard操作(檔案讀寫,容量計算)

Android SDCard操作(檔案讀寫,容量計算)

android.os.Environment

提供訪問環境變數 

Environment 靜態方法:

返回 : File

解釋 : 返回Data的目錄 

返回 : File

解釋 : 返回下載緩衝區目錄

返回 : File

解釋 : 返回擴充套件儲存區目錄(SDCard)

方法 : getExternalStoragePublicDirectory (String type)

返回 : File

解釋 : 返回一個高階的公用的外部儲存器目錄來擺放某些型別的檔案(來自網上) 

返回 : File

解釋 : 返回Android的根目錄

解釋 : 返回外部儲存裝置的當前狀態 

值    : "bad_removal"

解釋 : 在沒有正確解除安裝SDCard之前移除了

常量 : MEDIA_CHECKING

值    : "checking"

解釋 : 正在磁碟檢查

值    : "mounted"

解釋 : 已經掛載並且擁有可讀可寫許可權

值    : "mounted_ro"

解釋 : 已經掛載,但只擁有可讀許可權

常量 : MEDIA_NOFS

值    : "nofs"

解釋 : 物件空白,或者檔案系統不支援

值    : "removed"

解釋 : 已經移除擴充套件裝置

值    : "shared"

解釋 : 如果SDCard未掛載,並通過USB大容量儲存共享

值    : "unmountable"

解釋 : 不可以掛載任何擴充套件裝置

值    : "unmounted"

解釋 : 已經解除安裝

使用時只需先判斷SDCard當前的狀態然後取得SdCard的目錄即可(見原始碼)

---------------------------------------------------------------------------------------------------------

//SDcard 操作
  
ublic void SDCardTest() {  
// 獲取擴充套件SD卡裝置狀態  
String sDStateString = android.os.Environment.getExternalStorageState();  
  
// 擁有可讀可寫許可權  
if (sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) {  
  
    try {  
  
        // 獲取擴充套件儲存裝置的檔案目錄  
        File SDFile = android.os.Environment  
                .getExternalStorageDirectory();  
  
        // 開啟檔案  
        File myFile = new File(SDFile.getAbsolutePath()  
                + File.separator + "MyFile.txt");  
  
        // 判斷是否存在,不存在則建立  
        if (!myFile.exists()) {  
            myFile.createNewFile();  
        }  
  
        // 寫資料  
        String szOutText = "Hello, World!";  
        FileOutputStream outputStream = new FileOutputStream(myFile);  
        outputStream.write(szOutText.getBytes());  
        outputStream.close();  
  
    } catch (Exception e) {  
        // TODO: handle exception  
    }// end of try  
  
}// end of if(MEDIA_MOUNTED)  
// 擁有隻讀許可權  
else if (sDStateString  
        .endsWith(android.os.Environment.MEDIA_MOUNTED_READ_ONLY)) {  
  
    // 獲取擴充套件儲存裝置的檔案目錄  
    File SDFile = android.os.Environment.getExternalStorageDirectory();  
  
    // 建立一個檔案  
    File myFile = new File(SDFile.getAbsolutePath() + File.separator  
            + "MyFile.txt");  
  
    // 判斷檔案是否存在  
    if (myFile.exists()) {  
        try {  
  
            // 讀資料  
            FileInputStream inputStream = new FileInputStream(myFile);  
            byte[] buffer = new byte[1024];  
            inputStream.read(buffer);  
            inputStream.close();  
  
        } catch (Exception e) {  
            // TODO: handle exception  
        }// end of try  
    }// end of if(myFile)  
}// end of if(MEDIA_MOUNTED_READ_ONLY)  
// end of func  

計算SDCard的容量大小

android.os.StatFs

一個模擬linux的df命令的一個類,獲得SD卡和手機記憶體的使用情況 

構造方法:

公用方法:

返回 : int

解釋 :返回檔案系統上剩下的可供程式使用的塊

返回 : int

解釋 : 返回檔案系統上總共的塊

返回 : int

解釋 : 返回檔案系統 一個塊的大小單位byte

返回 : int

解釋 : 返回檔案系統上剩餘的所有塊 包括預留的一般程式無法訪問的

返回 : void

解釋 : 執行一個由該物件所引用的檔案系統雷斯塔特.(Google翻譯)

想計算SDCard大小和使用情況時, 只需要得到SD卡總共擁有的Block數或是剩餘沒用的Block數,再乘以每個Block的大小就是相應的容量大小了單位byte.(見程式碼) 

Java程式碼  
  1.     public void SDCardSizeTest() {  
  2. // 取得SDCard當前的狀態  
  3. String sDcString = android.os.Environment.getExternalStorageState();  
  4. if (sDcString.equals(android.os.Environment.MEDIA_MOUNTED)) {  
  5.     // 取得sdcard檔案路徑  
  6.     File pathFile = android.os.Environment  
  7.             .getExternalStorageDirectory();  
  8.     android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());  
  9.     // 獲取SDCard上BLOCK總數  
  10.     long nTotalBlocks = statfs.getBlockCount();  
  11.     // 獲取SDCard上每個block的SIZE  
  12.     long nBlocSize = statfs.getBlockSize();  
  13.     // 獲取可供程式使用的Block的數量  
  14.     long nAvailaBlock = statfs.getAvailableBlocks();  
  15.     // 獲取剩下的所有Block的數量(包括預留的一般程式無法使用的塊)  
  16.     long nFreeBlock = statfs.getFreeBlocks();  
  17.     // 計算SDCard 總容量大小MB  
  18.     long nSDTotalSize = nTotalBlocks * nBlocSize / 1024 / 1024;  
  19.     // 計算 SDCard 剩餘大小MB  
  20.     long nSDFreeSize = nAvailaBlock * nBlocSize / 1024 / 1024;  
  21. }// end of if  
  22. // end of func