android 各個存儲路徑及獲取方法總結


最長用到的就這三個位置

  • /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 來判斷外部存儲狀態, 如果已掛載的話再存儲.

 

在開發過程中,我們會經常需要操作手機的sd卡,在使用前,我們應該先判斷sd卡的狀態再使用

通過Environment.getExternalStorageState()方法我們可以獲得sd卡的狀態信息

返回的是一個string類型的狀態量。

狀態的參數用法如下

sd卡狀態  現象描述 /mnt/sdcard目錄存在否 canWrite()返回 canRead()返回 在/mnt/sdcard創建文件 在/mnt/sdcard創建文件夾
MEDIA_MOUNTED SD卡正常掛載 true true
MEDIA_REMOVED sd卡不存在 false false 不可 不可
MEDIA_UNMOUNTED sd卡存在,系統未掛載 false false 不可 不可
MEDIA_BAD_REMOVAL sd卡在被掛載前,被暴力直接移除

false false 不可 不可
MEDIA_SHARED 存在sd卡,但未被掛載處於被通過usb共享內存狀態中 false false 不可 不可
MEDIA_CHECKING sd卡處於被檢查狀態 false false 不可 不可
MEDIA_MOUNTED_READ_ONLY sd卡為只讀狀態 false true 不可 不可
MEDIA_NOFS 1、sd卡存在為空白狀態2、系統不支持 false false 不可 不可
MEDIA_UNMOUNTABLE sd卡不能掛載 false false 不可 不可

所需權限

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM