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), MediaStore或Intent#ACTION_OPEN_DOCUMENT。
注意:如果手機插入SD卡,可通過getExternalFilesDirs或getExternalCacheDirs遍歷來獲取路徑;
三,數據刪除
CLEAR DATA(刪除數據): 清除的是 data/data/對應程序包名 的文件夾下的所有的文件全都會被刪除,mnt/sdcard/Android/對應程序包名 下的所有的數據也都會被刪除。
CLEAR CACHE(清空緩存): 清除的數據是 data/data/對應程序包名/catch 目錄下的數據,還有 mnt/sdcard/Android/對應程序包名/catch目錄下的數據