天天看點

全面的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,context.getexternalcachedir

擷取路徑:/storage/emulated/0/android/data/應用包名/cache

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(以下載下傳目錄為例)

13,environment.getdownloadcachedirectory

擷取路徑:/cache

14,context.getfilestreampath

擷取路徑:/data/data/應用包名/files/download(示例download)

附注:

1)上述路徑是通過getabsulotepath方法獲得,一般情況下等同于getpath

2)在6.0系統上,一般java層實作對外置存儲的檔案操作需要向使用者申請,如果用c層實作,則可以越過這種限制

3)配置targetsdk為19,compilesdk為22,可以避免在6.0手機上的權限限制

繼續閱讀