當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Android設(shè)備中的內(nèi)部存儲和外部存儲
所有的Android設(shè)備均有兩個文件存儲區(qū)域:"internal" 與 "external" 。 這兩個名稱來自于早先的Android系統(tǒng),當(dāng)時大多設(shè)備都內(nèi)置了不可變的內(nèi)存(internal storage)及一個類似于SD card(external storage)這樣的可卸載的存儲部件。之后有一些設(shè)備將"internal" 與 "external" 都做成了不可卸載的內(nèi)置存儲,雖然如此,但是這一整塊還是從邏輯上有被劃分為"internal"與"external"的。只是現(xiàn)在不再以是否可卸載進(jìn)行區(qū)分了。 下面列出了兩者的區(qū)別:
本文引用地址://www.einuk.cn/emb/Column/7559.html
Internal storage:
1.總是可用的
2.這里的文件默認(rèn)只能被我們的app所訪問。
3.當(dāng)用戶卸載app的時候,系統(tǒng)會把internal內(nèi)該app相關(guān)的文件都清除干凈。
4.Internal是我們在想確保不被用戶與其他app所訪問的佳存儲區(qū)域。
External storage:
1.并不總是可用的,因為用戶有時會通過USB存儲模式掛載外部存儲器,當(dāng)取下掛載的這部分后,就無法對其進(jìn)行訪問了。
2.是大家都可以訪問的,因此保存在這里的文件可能被其他程序訪問。
3.當(dāng)用戶卸載我們的app時,系統(tǒng)僅僅會刪除external根目錄(getExternalFilesDir())下的相關(guān)文件。
4.External是在不需要嚴(yán)格的訪問權(quán)限并且希望這些文件能夠被其他app所共享或者是允許用戶通過電腦訪問時的佳存儲區(qū)域。
保存文件到External storage:
為了寫數(shù)據(jù)到external storage, 必須在你manifest文件中請求WRITE_EXTERNAL_STORAGE權(quán)限:
<manifest ...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
因為external storage可能是不可用的,比如遇到SD卡被拔出等情況時。因此在訪問之前應(yīng)對其可用性進(jìn)行檢查。我們可以通過執(zhí)行 getExternalStorageState()來查詢external storage的狀態(tài)。若返回狀態(tài)為MEDIA_MOUNTED, 則可以讀寫。
保存文件到Internal storage:
保存文件到internal storage時,可以通過執(zhí)行下面兩個方法之一來獲取合適的目錄作為 FILE 的對象:
getFilesDir() : 返回一個File,代表了我們app的internal目錄。
getCacheDir() : 返回一個File,代表了我們app的internal緩存目錄。請確保這個目錄下的文件能夠在一旦不再需要的時候馬上被刪除,并對其大小進(jìn)行合理限制,例如1MB 。系統(tǒng)的內(nèi)部存儲空間不夠時,會自行選擇刪除緩存文件。
同樣可以使用File() 構(gòu)造器在那些目錄下創(chuàng)建一個新的文件,如下:
File file = new File(context.getFilesDir(), filename);
之后我們就可以通過IO流對文件進(jìn)行讀寫操作了。