Android應用開發——文件目錄

Android 存儲位置及 API

一、內部存儲

應用安裝後都會在Android 根目錄生成 /data/data/packagename,當前應用讀取不需要讀寫權限

注意: 有些開發者可能看到過應用的根目錄爲 /data/user/0/packagename 的情況,這裏解釋一下,Android 4.2 版本添加了同一設備可以登錄不同用戶的功能(由於專利原因僅限於平板電腦,手機不支持此功能),所以爲了區分不同用戶在同一應用中的設置和存儲的數據,添加了該系列的路徑,該路徑指向 /data/data/packagename

getFileDir() 方法得到的是該目錄下 files 文件夾的 File 對象
getChacheDir() 方法得到的是該目錄下 cache 文件夾的 File 對象
直接調用ContextWrapper的 openFileOutput(String name,int mode) 也會在該目錄下 files 文件夾下創建相應的文件,並且是私密的。可以修改爲其他應用可訪問的,通過 openFileOutput 方法的 mode 參數來完成
注意:

  • 該目錄只有 root 權限下可以查看,會隨着應用卸載刪除
  • 應用程序詳情中清除數據會將 packagename 下所有數據以及內置存儲、外置 SD 卡存儲空間中 /Android/data/packagename 的整個目錄刪除刪除
  • 應用程序詳情中清除緩存會將 packagename/cache 目錄下所有數據以及內置存儲、外置 SD 卡存儲空間中 /Android/data/packagename/cache 的整個目錄刪除
二 內置存儲
手機自帶 ROM 的存儲路徑

getExternalCacheDir() 方法,獲取內置存儲卡中 /Android/data/packagename/cache 目錄的路徑,4.4及之後讀寫不需要權限,會隨着應用卸載刪除
getExternalFilesDir() 方法,獲取內置存儲卡中 /Android/data/packagename/files 目錄的路徑,4.4之後讀寫不需要權限,會隨着應用卸載刪除,該方法參數爲 “null” 時不指定子文件夾,指定時創建子文件夾保存文件。創建的文件其他應用只要有讀寫權限也可以讀取,如果要私密的就使用內部存儲。
Environment.getExternalStorageDirectory() 方法得到的是內置存儲目錄的根路徑目錄,讀寫需要權限,不會隨着應用卸載刪除
Environment.getExternalStoragePublicDirectory() 方法得到的是內置存儲目錄根路徑下的特定類型文件的公共目錄,讀寫需要權限,不會隨着應用卸載刪除
注意,內置存儲中 /Android/data/packagenaem/ 路徑的讀寫 Android 版本不同,需要權限不同,所以開發時應始終聲明讀寫權限

三、外置SD存儲卡

支持外置SD存儲卡的機器,可以由 ContextCompat 的 getExternalFilesDirs() 方法得到所有存儲根目錄下 /Android/data/packagename/files 路徑的數組,如果該方法第二個參數不爲 null 則會再創建相應子級文件夾。再根據數組遍歷,即可操作相應的存儲路徑進行讀寫。4.4及之後該操作不需要聲明讀寫權限。
File[] files = ContextCompat.getExternalFilesDirs(this, “”);

注意:

通過該方法得內置存儲卡的路徑,可以對根據 getParent 系列方法可以得到上一級的路徑進行讀寫操作,但需要權限
通過該方法得外置SD存儲卡的路徑,但是不可以對根據 getpParent 系列方法得到的上級路徑進行寫,如果寫會報沒有權限異常,即使聲明寫權限也沒用。聲明讀權限後可正常進行讀操作。
內置和外置SD存儲卡中 Android/data/packagename 目錄,都會在應用程序詳情中清除數據和應用卸載時被刪除。

作者:renxuelong
鏈接:https://www.jianshu.com/p/d5945c726182
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章