Android 常用路徑的獲取
作者:ZONE畫派
鏈接:https://www.jianshu.com/p/e8a11d23513b
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
由於歷史原因,Android 歷史上一些路徑並不固定(也和外存設備的變更有關)。
沒法通過固定的路徑訪問一些文件,需要通過不同的接口獲取路徑。
一些常用路徑如下:
路徑 | 方法 | 權限 | 描述 | 備註 |
---|---|---|---|---|
應用內部存儲緩存目錄 | context.getCacheDir() | 無需申請權限 | 內部使用,外部程序無法訪問。卸載應用時刪除。系統空間不足時可能會刪除 | |
應用內部存儲文件目錄 | context.getFileDir() | 無需申請權限 | 內部使用,外部程序無法訪問。卸載應用時刪除。 | |
應用內部存儲數據庫目錄 | context.getDatabasePath() | 無需申請權限 | 內部使用,外部程序無法訪問。主要是 SQLite 數據庫的目錄 | |
應用外部存儲緩存目錄 | context.getExternalCacheDir() | 讀寫需要申請權限 | 外部程序可以訪問。卸載應用可能會刪除。系統空間不足時可能會刪除 | |
應用外部存儲文件目錄 | context.getExternalFilesDir(String) | 讀寫需要申請權限 | 外部程序可以訪問。卸載應用可能會刪除。 | 支持參數:DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_ALARMS, DIRECTORY_RINGTONES, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, DIRECTORY_DOCUMENTS |
外部存儲空間目錄 | Environment.getExternalStorageDirectory() | 讀寫需要申請權限 | 外部程序可以訪問。卸載應用不會刪除。 | 官方建議不要使用該目錄,爲避免污染根命名空間 |
外部存儲空間分類目錄 | Environment.getExternalStoragePublicDirectory(String) | 讀寫需要申請權限 | 外部程序可以訪問。卸載應用不會刪除。 | 支持如下參數android.os.Environment.:DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, DIRECTORY_DOCUMENTS |
應用內部存儲緩存目錄 context.getCacheDir()
- 接口:context.getCacheDir()
- 例子:/data/data/包名/cache
- 權限:應用內部存儲空間(數據文件私有,外部程序無法訪問)
- 卸載:應用被卸載的時候,該目錄下的文件也會跟着被刪除。
- 備註:如果系統存儲空間較少時,系統會自動刪除這個目錄下的文件。官方建議超過 1 MB 的文件最後不要存儲到這個路徑下。
應用內部存儲文件目錄 context.getFilesDir()
- 接口:context.getFilesDir()
- 例子:/data/data/包名/files
- 權限:應用內部存儲空間(數據文件私有,外部程序無法訪問)
- 備註:不同於 cache 目錄,系統存儲空間不足時不會刪除該目錄。
訪問該路徑的方法:
/*
* name: 文件名
* mode: 讀/寫模式。默認爲 Context.MODE_PRIVATE = 0
*/
context.openFileInput(String name, int mode); // 讀
context.openFileOutput(String name, int mode); // 寫
應用內部存儲數據庫目錄 context.getDatabasePath()
- 接口:context.getExternalCacheDir()
- 例子:/data/data/包名/databases
- 權限:應用內部存儲空間(數據文件私有,外部程序無法訪問)
- 卸載:當應用被卸載的時候,目錄下的文件會被刪除。(使用 SD 卡等外部存儲則不會刪除目錄)
- 備註:默認不存在
應用外部存儲緩存目錄 context.getExternalCacheDir()
- 接口:context.getExternalCacheDir()
- 例子:/sdcard/Android/data/包名/cache 或 /storage/emulated/0/Android/data/包名/cache
- 權限:應用外部存儲空間(讀寫文件需要申請權限 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE)
- 卸載:當應用被卸載的時候,目錄下的文件會被刪除。(使用 SD 卡等外部存儲則不會刪除目錄)
- 備註:不同設備的目錄可能不一樣,建議使用相對路徑。
應用外部存儲文件目錄 context.getExternalFilesDir(String)
- 接口:context.getExternalFileDir(String)
- 例子:/sdcard/Android/data/包名/files 或 /storage/emulated/0/Android/data/包名/files
- 權限:應用外部存儲空間(讀寫文件需要申請權限 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE)
- 卸載:當應用被卸載的時候,目錄下的文件會被刪除。(使用 SD 卡等外部存儲則不會刪除目錄)
- 備註:按照文件類型的不同,支持的參數有:DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_ALARMS, DIRECTORY_RINGTONES, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, DIRECTORY_DOCUMENTS
外部存儲空間目錄 Environment.getExternalStorageDirectory()
- 接口:Environment.getExternalStorageDirectory()
- 例子:/sdcard/ 或 /storage/emulated/0/
- 權限:應用外部存儲空間(讀寫文件需要申請權限 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE)
- 卸載:當應用被卸載的時候,目錄下的文件不會被刪除。
- 備註:這個目錄是用來存放各種類型的文件的目錄,在這裏用戶可以分類管理不同類型的文件(例如音樂、圖片、電影等)。官方建議不要直接直接使用該目錄,爲了避免污染用戶的根命名空間,應用私有的數據,應該放在 Context.getExternalFilesDir 目錄下其他的可以被分享的文件,可以放在 getExternalStoragePublicDirectory(String) 目錄下。
外部存儲空間分類目錄 Environment.getExternalStoragePublicDirectory(String)
- 接口:Environment.getExternalStoragePublicDirectory(String)
- 例子:根據類型不同,可以是 /storage/emulated/0/DCIM,/storage/emulated/0/Music 等
- 權限:應用外部存儲空間(讀寫文件需要申請權限 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE)
- 卸載:當應用被卸載的時候,目錄下的文件不會被刪除。
- 備註:這個目錄是用來存放各種類型的文件的目錄,在這裏用戶可以分類管理不同類型的文件(例如音樂、圖片、電影等)。類型如下: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS,
DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, DIRECTORY_DOCUMENTS