Android開發學習---如何寫資料到外部存放裝置(sd卡),Environment.getExternalStorageDirectory,怎麼擷取sd卡的大小?

來源:互聯網
上載者:User

標籤:android   style   c   class   blog   code   

本文主要介紹如何寫資料到sd卡,這裡主要到的技術是Environment中的方法.

1.

 

 

2.實現代碼:

 /datasave/src/com/amos/datasave/savePasswordService.java 

    //寫資料到sdcard    public void savePasswordToSDCard(String name, String password) {        // android 2.1 /sdcard/xx.txt        // android 2.2 /mnt/sdcard/xx.txt        // self_define /excard/xx.txt        //        File externalStorageDirectory = Environment.getExternalStorageDirectory();//        String path = externalStorageDirectory.getPath();//        System.out.println("path:" + path);        // 要儲存的內容        String content = name + ":" + password;                Log.d(tag, "檢驗sdcard是否可用?");        //判斷sdcard是否存在?        if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){            Log.d(tag, "sdcard不可用!");            Toast.makeText(context, "沒有找到SDCard!", Toast.LENGTH_LONG);            return ;        };                try {            // File file = new File("/sdcard/qqpassword.txt");            // File file = new File(path + "/qqpassword2.txt");            File file = new File(Environment.getExternalStorageDirectory(), "/qqpassword2.txt");            FileOutputStream fos = new FileOutputStream(file);            fos.write(content.getBytes());            fos.flush();            fos.close();        } catch (Exception e) {            e.printStackTrace();        }    }

 

 在android2.1及以前版本中,其sdcard目錄在根目錄,2.2,2.3以後其sdcard目錄就變成了/mnt/sdcard了,以及一些廠商自訂的android系統,可能也會把sdcard的名稱改的各不相同.這裡如果還是用絕對路徑,那麼程式的相容性將會大大降低.這裡主要用到了Enviroment類.

android.os.Environment

其主要方法有:

  • getRootDirectory()---->/  擷取根目錄
  • getDataDirectory()---->/data 擷取data目錄
  • getExternalStorageDirectory()--->/sdcard 擷取sd卡目錄
  • getDownloadCacheDirectory()--->/cache 擷取下載檔案的緩衝目錄
  • getExternalStorageState--->sdcard的狀態,removed,unmounted,checking,nofs,mounted,mounted_ro,shared,unmountable,bad_removal
完整的savePasswordService.java檔案為:
package com.amos.datasave;import java.io.File;import java.io.FileOutputStream;import android.annotation.SuppressLint;import android.content.Context;import android.os.Environment;import android.util.Log;import android.widget.Toast;@SuppressLint("WorldWriteableFiles")public class savePasswordService {    private Context context;    private String tag = "savePasswordService";    public savePasswordService(Context context) {        this.context = context;    }    public void savePasswordToFile(String name, String password) {        // 這裡設定檔案的許可權        String content = name + ":" + password;        Log.d(tag, "設定檔案的讀寫權限");        try {            FileOutputStream fileOutput = context.openFileOutput("LoginTestConfig.txt", Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);            fileOutput.write(content.getBytes());            fileOutput.flush();            fileOutput.close();        } catch (Exception e) {            Log.d(tag, "設定檔案的讀寫權限失敗!");            e.printStackTrace();        }    }    //寫資料到sdcard    public void savePasswordToSDCard(String name, String password) {        // android 2.1 /sdcard/xx.txt        // android 2.2 /mnt/sdcard/xx.txt        // self_define /excard/xx.txt        //        File externalStorageDirectory = Environment.getExternalStorageDirectory();//        String path = externalStorageDirectory.getPath();//        System.out.println("path:" + path);        // 要儲存的內容        String content = name + ":" + password;                Log.d(tag, "檢驗sdcard是否可用?");        //判斷sdcard是否存在?        if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){            Log.d(tag, "sdcard不可用!");            Toast.makeText(context, "沒有找到SDCard!", Toast.LENGTH_LONG);            return ;        };                try {            // File file = new File("/sdcard/qqpassword.txt");            // File file = new File(path + "/qqpassword2.txt");            File file = new File(Environment.getExternalStorageDirectory(), "/qqpassword2.txt");            FileOutputStream fos = new FileOutputStream(file);            fos.write(content.getBytes());            fos.flush();            fos.close();        } catch (Exception e) {            e.printStackTrace();        }    }}
View Code

 如何擷取sdcard的大小?

        StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getPath());        long blockSize = statFs.getBlockSize();        long blockCount = statFs.getBlockCount();        long sdCardSize = blockSize*blockCount;        Log.d(tag,""+sdCardSize );

 

這裡使用的是Environment中的方法擷取到sdcard的路徑,然後將其路徑通過StatFs類,該類主要擷取指定檔案路徑下的檔案資訊(filesystem info).

擷取其塊大小,塊數量.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.