Android存儲空間存儲路徑總結

一、總結

路徑取得方法 APP專用 非root用戶可見 APP卸載時
內部數據空間 Context.getFilesDir() yes no 消失
內部緩存空間 Context.getCacheDir() yes no 消失
外部數據空間 Context.getExternalFilesDir() yes yes 消失
外部緩存空間 Context.getExternalCacheDir() yes yes 消失
外部公開空間 Environment.getExternalStorageDirectory() no yes 不消失
外部公開共享空間 Environment.getExternalStoragePublicDirectory() no yes 不消失

內部空間 只有APP自己可以訪問,其他APP和手機用戶都不可以見。卸載消失。

外部空間 APP自己,手機用戶,其他授權APP可以訪問。卸載消失

公開空間,所有APP都可以訪問。卸載不消失。

測試

Context.getFilesDir()                           :/data/data/com.example/files
Context.getCacheDir()                           :/data/data/com.example/cache
Context.getExternalCacheDir()                   :/storage/emulated/0/Android/data/com.example/cache
Context.getExternalFilesDir()                   :/storage/emulated/0/Android/data/com.example/files
Environment.getExternalStorageDirectory()       :/storage/emulated/0
Environment.getExternalStoragePublicDirectory() :/storage/emulated/0/

1.內部存儲空間中的應用私有目錄

路徑取得方法 APP專用 非root用戶可見 APP卸載時
內部數據空間 Context.getFilesDir() yes no 消失
內部緩存空間 Context.getCacheDir() yes no 消失

對於設備中每一個安裝的 App,系統都會在內部存儲空間的 data/data 目錄下以應用包名爲名字自動創建與之對應的文件夾。這個文件夾用於 App 中的 WebView 緩存頁面信息,SharedPreferences 和 SQLiteDatabase 持久化應用相關數據等。

對於沒有 Root 過的手機,普通用戶是無法查看 data/data 目錄內容的。不過開發人員可以使用模擬器調試應用,並通過 DDMS(Dalvik Debug Monitor Server)提供的 File Explorer 工具查看模擬器設備的存儲空間。

當用戶卸載 App 時,系統自動刪除 data/data 目錄下對應包名的文件夾及其內容。

2.外部存儲空間中的應用私有目錄

路徑取得方法 APP專用 非root用戶可見 APP卸載時
外部數據空間 Context.getExternalFilesDir() yes yes 消失
外部緩存空間 Context.getExternalCacheDir() yes yes 消失

考慮內部存儲空間容量有限,普通用戶不能直接直觀地查看目錄文件等其他原因,Android 在外部存儲空間中也提供有特殊目錄供應用存放私有文件,文件路徑爲:

/storage/emulated/0/Android/data/app包名目錄

值得注意的是,與內部存儲空間的應用私有目錄不同的是:

第一,默認情況下,系統並不會自動創建外部存儲空間的應用私有目錄。只有在應用需要的時候,開發人員通過 SDK 提供的 API 創建該目錄文件夾和操作文件夾內容。

第二,自 Android 7.0 開始,系統對應用私有目錄的訪問權限進一步限制。其他 App 無法通過 file:// 這種形式的 Uri 直接讀寫該目錄下的文件內容,而是通過 FileProvider 訪問。

而相同點在於:同屬於應用私有目錄,當用戶卸載 App 時,系統也會自動刪除外部存儲空間下的對應 App 私有目錄文件夾及其內容。

值得注意的一點是,對於外部存儲空間下的應用私有目錄文件,由於普通用戶可以自由修改和刪除,開發人員在使用時,一定要做好判空處理和異常捕獲,防止應用崩潰退出!

3.外部存儲空間中的公共目錄

路徑取得方法 APP專用 非root用戶可見 APP卸載時
外部公開空間 Environment.getExternalStorageDirectory() no yes 不消失
外部公開共享空間 Environment.getExternalStoragePublicDirectory() no yes 不消失

從訪問權限上來說,應用無關數據應該是宿主應用希望與其他應用共享這些數據的,應該存放在外部存儲空間的公共目錄文件夾下。

外部存儲空間已經爲用戶默認分類出一些公共目錄。開發人員可以通過 Environment 類提供的方法直接獲取相應目錄的絕對路徑,傳遞不同的 type 參數類型即可:

Environment.getExternalStoragePublicDirectory(String type);

Envinonment 類提供諸多 type 參數的常量,比如:

  • DIRECTORY_MUSIC:/storage/emulated/0/Music
  • DIRECTORY_MOVIES:/storage/emulated/0/Movie
  • DIRECTORY_PICTURES:/storage/emulated/0/Pictures
  • DIRECTORY_DOWNLOADS: /storage/emulated/0/Download
  • DIRECTORY_DOCUMENTS: /storage/emulated/0/Documents

還可以在外部存儲空間自由創建其他目錄,通過這個方式獲取外部存儲空間的絕對路徑,然後操作文件:

Environment.getExternalStorageDirectory();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章