全面的Android檔案目錄解析和獲取方法(包含對6.0系統的說明)

simen201310發表於2016-08-28
一直以來對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手機上的許可權限制


相關文章