Android 常用路徑的獲取

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_STORAGEWRITE_EXTERNAL_STORAGE
  • 卸載:當應用被卸載的時候,目錄下的文件會被刪除。(使用 SD 卡等外部存儲則不會刪除目錄)
  • 備註:不同設備的目錄可能不一樣,建議使用相對路徑。

應用外部存儲文件目錄 context.getExternalFilesDir(String)

  • 接口:context.getExternalFileDir(String)
  • 例子:/sdcard/Android/data/包名/files/storage/emulated/0/Android/data/包名/files
  • 權限:應用外部存儲空間(讀寫文件需要申請權限 READ_EXTERNAL_STORAGEWRITE_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_STORAGEWRITE_EXTERNAL_STORAGE
  • 卸載:當應用被卸載的時候,目錄下的文件不會被刪除。
  • 備註:這個目錄是用來存放各種類型的文件的目錄,在這裏用戶可以分類管理不同類型的文件(例如音樂、圖片、電影等)。官方建議不要直接直接使用該目錄,爲了避免污染用戶的根命名空間,應用私有的數據,應該放在 Context.getExternalFilesDir 目錄下其他的可以被分享的文件,可以放在 getExternalStoragePublicDirectory(String) 目錄下。

外部存儲空間分類目錄 Environment.getExternalStoragePublicDirectory(String)

  • 接口:Environment.getExternalStoragePublicDirectory(String)
  • 例子:根據類型不同,可以是 /storage/emulated/0/DCIM/storage/emulated/0/Music
  • 權限:應用外部存儲空間(讀寫文件需要申請權限 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
  • 卸載:當應用被卸載的時候,目錄下的文件不會被刪除。
  • 備註:這個目錄是用來存放各種類型的文件的目錄,在這裏用戶可以分類管理不同類型的文件(例如音樂、圖片、電影等)。類型如下: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS,
    DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, DIRECTORY_DOCUMENTS
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章