各個路徑
最長用到的就這三個位置
- /data/data/包名/
- /sdcard/Android/data/包名/
- /sdcard/xxx
前兩個是應用內部存儲, 會隨著app的卸載而自動刪除, sdcard中其他的文件夾不會自動刪除, 除非用戶手動刪除, 否則會一直存在, 換句話說就是垃圾.
Google官方建議把數據存儲在 /sdcard/Android/data/包名/ 下.
路徑獲取方法
前兩個應用內部存儲通過 Context 來獲取, 第三個作為外部存儲是通過 Environment 類來獲取. 注釋為返回值.
-
/data/data/包名/
context.getFilesDir(); // /data/data/包名/files context.getCacheDir(); // /data/data/包名/cache
-
/sdcard/Android/data/包名/
context.getExternalFilesDir(); // /sdcard/Android/data/包名/files context.getExternalCacheDir(); // /sdcard/Android/data/包名/cache
-
/sdcard/xxx
// /storage/emulated/0 Environment.getExternalStorageDirectory(); // /storage/emulated/0/DCIM, 另外還有MOVIE/MUSIC等很多種標準路徑 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
注意, 根據源碼文檔中說明, 獲取外部存儲時, 有可能會因為各種問題導致獲取失敗, 建議先使用 getExternalStorageState 來判斷外部存儲狀態, 如果已掛載的話再存儲.
設置中清除的數據
在手機設置中的應用設置里有 清除數據 和 清除緩存 兩個選項, 它們清除的位置是:
清除數據 清除的是 /Android/data/包名/ 和 /data/data/包名/ 下的所有內容;
清除緩存 會清除 /sdcard/Android/data/包名/cache/ 和 /data/data/包名/cache/ 內的內容.
/sdcard/xxx 下的內容會依然存在.