全面的Android檔案目錄解析和獲取方法(包含對6.0系統的說明)
一直以來對Android系統目錄的獲取方法和具體代表含義沒有掌握清楚,今天特意整理了一下,分享給大家,對自己也是一個總結。
在android 6.0以前,你可以只關注外接儲存是否掛載即可,但是從6.0以後,也就是M系統後,還需要判斷是否有讀寫許可權,只有具備這些許可權才可以讀寫外接儲存。
1,Context.getFilesDir
獲取路徑:/data/user/0/應用包名/files
該目錄是應用的檔案儲存目錄,應用被解除安裝時,該目錄一同被系統刪除。預設存在,預設具備讀寫許可權(6.0系統可以不用向使用者申請)
2,Context.getCacheDir
獲取路徑:/data/user/0/應用包名/cache
該目錄是應用的檔案快取目錄,應用被解除安裝時,該目錄一同被系統刪除。預設存在,預設具備讀寫許可權。不同於getFileDir,該目錄下的檔案在系統記憶體緊張時,會被清空檔案,來騰出空間供系統使用,著名的圖片載入庫ImageLoader就是在沒有外接儲存讀寫許可權時使用此資料夾。getFileDir,不會因為系統記憶體不足而被清空。(6.0系統可以不用向使用者申請)
3,Context.getObbDir
獲取路徑:/storage/emulated/0/Android/obb/應用包名
該目錄是應用的資料存放目錄,一般被用來存放遊戲資料包obb檔案。預設存在,可讀寫(6.0系統可以不用向使用者申請)
4,Context.CodeCacheDir
獲取路徑:/data/user/0/應用包名/code_cache
預設存在,可讀寫。(6.0系統可以不用向使用者申請)
5,Context.getExternalFilesDir
獲取路徑:(以下載目錄為準) /storage/emulated/0/Android/data/應用包名/files/Download
預設存在,可讀寫。(6.0系統可以不用向使用者申請)
6,Context.getExternalCacheDir
獲取路徑:/storage/emulated/0/Android/data/應用包名/cache
預設存在,可讀寫。(6.0系統可以不用向使用者申請)
7,Context.getDatabasePath
獲取路徑:/data/user/0/應用包名/databases/引數名
預設不存在,可讀寫。(6.0系統可以不用向使用者申請)
8,Context.getDir
獲取路徑:/data/user/0/應用包名/app_引數名
預設存在,可讀寫。分為Private等三個許可權,private代表僅能自己訪問。(6.0系統可以不用向使用者申請)
9,Context.getPackageCodePath
獲取路徑:/data/app/應用包名-1/base.apk
預設存在,獲取apk包路徑
10,Context.getRootDirectory
獲取路徑:/system
預設存在,不可讀寫(除非具備root許可權)
11,Environment.getExternalStorageDirectory
獲取路徑:/storage/emulated/0
預設存在,宣告許可權則可讀寫(6.0和以後系統還需要向使用者申請同意才可以)
12,Environment.getExternalStoragePublicDirectory
獲取路徑:/storage/emulated/0/Download(以下載目錄為例)
預設存在,宣告許可權則可讀寫(6.0和以後系統還需要向使用者申請同意才可以)
13,Environment.getDownloadCacheDirectory
獲取路徑:/cache
預設存在,宣告許可權則可讀寫(6.0和以後系統還需要向使用者申請同意才可以)
14,Context.getFileStreamPath
獲取路徑:/data/data/應用包名/files/download(示例download)
該目錄是應用的檔案儲存目錄,應用被解除安裝時,該目錄一同被系統刪除。預設存在,預設具備讀寫許可權(6.0系統可以不用向使用者申請)
附註:
1)上述路徑是通過getAbsulotePath方法獲得,一般情況下等同於getPath
2)在6.0系統上,一般Java層實現對外接儲存的檔案操作需要向使用者申請,如果用C層實現,則可以越過這種限制
3)配置targetsdk為19,compilesdk為22,可以避免在6.0手機上的許可權限制
相關文章
- Ionic檔案目錄說明
- php一句話獲取獲取檔案目錄的方法PHP
- 解析Linux作業系統檔案目錄Linux作業系統
- 獲取Linux系統中目錄檔案大小的方法Linux
- android 6.0下獲取當前呼叫介面的包名Android
- iOS 常見的系統檔案目錄介紹iOS
- 系統快取全解析5:檔案快取依賴快取
- Android開發:獲取當前系統時間和日期的方法Android
- MVVM 模式下iOS專案目錄結構詳細說明MVVM模式iOS
- Java反射獲取類和物件資訊全解析Java反射物件
- C#系統快取全解析C#快取
- 系統學習iOS動畫之零:說明和目錄iOS動畫
- 檔案目錄(MOOC)
- 檔案目錄配置
- Docker 檔案目錄Docker
- 本地檔案包含之包含日誌獲取webshellWebshell
- Docker和宿主機作業系統檔案目錄互相隔離的實現原理Docker作業系統
- 獲取絕對路徑下的檔名和檔案字尾方法
- 『Android』 獲取檔案系統剩餘空間Android
- Android系統資訊獲取Android
- Fresco的封裝和使用說明以及獲取快取中的Bitmap物件封裝快取物件
- 不要隨意刪除或者移動系統檔案目錄
- Redhat:檔案目錄管理Redhat
- laravel檔案目錄樹Laravel
- Linux檔案目錄Linux
- android混淆檔案說明Android
- android系統日期時間的獲取Android
- 檔案管理 檔案目錄概念
- Centos系統中 Systemd 的Unit檔案配置說明CentOS
- unity3d專案檔案目錄釋出後,對應的ios/android應用目錄Unity3DiOSAndroid
- Win10 - 登錄檔獲取許可權的方法Win10
- Android安全開發之ZIP檔案目錄遍歷Android
- 獲取登錄檔字型
- DedeCMS模板目錄的檔案目錄結構
- Android系統原始碼目錄解析Android原始碼
- 系統快取全解析2:頁面輸出快取快取
- 比Linux grep更快的作業系統檔案目錄搜尋工具:ripgrepLinux作業系統
- Linux中操作工作目錄和檔案目錄Linux