Android存儲及路徑

Android手機存儲分類

分爲:內部存儲和外部存儲

如何區分內部存儲和外部存儲:可以從物理和邏輯區分

從物理的角度區分,內部存儲就是手機自帶存儲空間,外部存儲就是外部接入的存儲空間例如SD卡

從邏輯意義上區分,data,system 目錄就是手機的內部存儲,而 mnt 或者 storage目錄下的sdcard0指向的sdcard目錄就是外部存儲。如果是手機自帶的外部存儲被稱爲機身外部存儲,外置的SD卡則稱之爲外部存儲。當然兩者都稱爲外部存儲也沒關係。這裏描述的內部存儲和機身外部存儲都屬於機身存儲;

邏輯區分是從4.4以上版本開始的;

 

二,內部存儲

獲取內部存儲路徑和api對應關係

1,通過Environment

Environment.getDataDirectory()                /data

Environment.getRootDirectory()                /system

Environment.getDownloadCacheDirectory()           /cache

2,通過上下文Context

getCacheDir()                /data/data/0/包名/cache

getFilesDir()                  /data/data/0/包名/files

Build.VERSION_CODES.LOLLIPOP及以上版本新增的API

getDir("靚仔", MODE_PRIVATE)               /data/data/0/包名/app_靚仔

getNoBackupFilesDir()                              /data/data/0/包名/no_backup

getCodeCacheDir()                                   /data/data/0/包名/code_cache

Build.VERSION_CODES.N及以上版本新增的API

getDataDir()                                    /data/data

特點:

1、內部存儲路徑中的文件是分類存儲的,我們無法干涉,除了cache目錄,別的目錄系統不會自動創建

2、除了files目錄,別的目錄我們幾乎都是無法手動操作的

3、別的App幾乎無法訪問內部存儲中的數據,除了用非法手段或者我們主動暴露

4、內部存儲目錄下的文件夾及文件會隨着app的卸載而被系統自動刪除

三,外部存儲

外部存儲又可分爲共有目錄和私有目錄;

私有目錄

私有目錄:不需要訪問權限

Android 在外部存儲空間中也提供了特殊目錄供App存放私有文件,該路徑爲:/storage/emulated/0/Android/data/包名/

注意:應用安裝之後/storage/emulated/0/Android/data/是沒有對應的應用文件夾的,需要手動調用對應的API創建;

獲取私有目錄路徑

getObbDir() /storage/emulated/0/Android/obb/com.xjkj.autorepair

getExternalCacheDir() /storage/emulated/0/Android/data/com.xjkj.autorepair/cache

getExternalFilesDir(null) /storage/emulated/0/Android/data/com.xjkj.autorepair/files

共有目錄

共有目錄:需要申請權限才能訪問

權限:6.0以上需要動態申請

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

獲取共有目錄的API 29中已過時:

Api 路徑
Environment.getExternalStorageDirectory()   /storage/emulated/0

Environment.getExternalStoragePublicDirector(Environment.DIRECTORY_DOWNLOADS)

獲取共有目錄,例如Download共有目錄

/storage/emulated/0/Download

 

 

 

 

官方的解釋:

在API級別29中不贊成使用此方法。爲了提高用戶隱私,不建議直接訪問共享/外部存儲設備。當應用定位到時 Build.VERSION_CODES.Q,此方法返回的路徑不再可供應用直接訪問。應用程序可以繼續訪問內容通過遷移到替代品,如存儲在共享/外部存儲 Context#getExternalFilesDir(String), MediaStoreIntent#ACTION_OPEN_DOCUMENT

注意:如果手機插入SD卡,可通過getExternalFilesDirs或getExternalCacheDirs遍歷來獲取路徑;

三,數據刪除

CLEAR DATA(刪除數據): 清除的是 data/data/對應程序包名 的文件夾下的所有的文件全都會被刪除,mnt/sdcard/Android/對應程序包名 下的所有的數據也都會被刪除。

CLEAR CACHE(清空緩存): 清除的數據是 data/data/對應程序包名/catch 目錄下的數據,還有 mnt/sdcard/Android/對應程序包名/catch目錄下的數據

 

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