Android外部儲存空間通常比較大像是SD卡

需要WRITE_EXTERNAL_STORAGE的權限

和Internel其實很像只是位置不同

只要記得private的是在/storage/SD卡名稱/Android/dara/package名稱/files/指定的資料夾

 

而使用方是就和Java ioㄧ樣

 

1. 先到官網http://developer.android.com/training/basics/data-storage/files.html

外部儲存空間的幾種狀況

 a. 有可能會被移除, 像是拔掉SD卡

 b. 在不被你控制下被讀取, 像是拔掉SD卡

然後再分析裡面的內容

 c. 當放在public的空間內, 移除app並不會把資料刪掉

01.png

 

2. 而其中又分成兩種

a. Publuc files : 可以被其他使用者或app看到, 移除app時資料不會被移除

b. Private files : 不能被其他使用者或app看到, 移除app時資料會被移除

02.png

 

3. 首先要宣告權限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

03.png

 

4. 接著介紹幾種儲存位置

        //private 會一起被砍掉
        Log.d("TAG", "Path = " + getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS));
        //public 不會一起被砍掉
        Log.d("TAG", "Path = " + Environment.getExternalStorageDirectory());
        //public 不會一起被砍掉
        Log.d("TAG", "Path = " + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));

 

getExternalFilesDir 是指向private的External空間

位置是/storage/SD卡名稱/Android/dara/package名稱/files/指定的資料夾

再來

Environment.getExternalStorageDirectory() 是取得public的External空間的根目錄

位置是/storage/SD卡名稱

最後

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

是取得是取得public的External空間的預設資料夾的目錄

位置是/storage/SD卡名稱/指定的資料夾

04.png

 

5.模擬器的相對位置

/storage/emulated/0/Android/dara/package名稱/files/指定的資料夾

/storage/emulated/0/指定的資料夾

/storage/emulated/0/指定的資料夾

 

06.png

 

6. 用法就跟一般java io一樣

        try {
            File file = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "TEST.txt");
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write("TEST CONTENT".getBytes());
            fileOutputStream.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

05.png

 

7. 以下是private的位置

07.png

 

8. 以下是public的位置

08.png

 

9. 最後如果寫入成功卻無法看到檔案

通常是因為資料夾並無即時更新

所以要強制它重新掃描一次

範例如下:

        MediaScannerConnection.scanFile(this,
                new String[]{Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()}
                , null, null);

09.png  

arrow
arrow

    RX1226 發表在 痞客邦 留言(0) 人氣()