Android文件路徑整理:context獲取路徑和Environment類

context獲取路徑

image.png

context.getFilesDir()

獲取路徑:/data/user/0/應(yīng)用包名/files

包含應(yīng)用程序文件的目錄的路徑。不需要額外的權(quán)限來讀取或在返回的路徑下寫入文件。

context.getCacheDir()

獲取路徑:/data/user/0/應(yīng)用包名/cache

應(yīng)用程序緩存文件的目錄的路徑。強(qiáng)烈鼓勵(lì)應(yīng)用程序?qū)⒕彺婵臻g的使用保持在滿額。當(dāng)該文件夾超額時(shí),系統(tǒng)將自動(dòng)刪除該目錄中的文件為其他地方提供需要空間,當(dāng)不滿額時(shí)則不會(huì)。不需要額外的權(quán)限來讀取或在返回的路徑下寫入文件。

context.getExternalCacheDir()

獲取路徑:/storage/emulated/0/Android/data/應(yīng)用包名/cache

應(yīng)用程序特定目錄的絕對路徑,與 mContext.getCacheDir() 相似,區(qū)別在于平臺(tái)并不總是監(jiān)視共享存儲(chǔ)中可用的空間,因此可能不會(huì)自動(dòng)刪除這些文件。這些文件是應(yīng)用程序內(nèi)部的,通常不作為媒體文件對用戶展示。

context.getExternalFilesDir(String type)

獲取路徑:/storage/emulated/0/Android/data/應(yīng)用包名/files/type指定目錄(詳見下面Environment分析)

應(yīng)用程序特定目錄的絕對路徑,與 mContext.getFilesDir() 相似。這些文件是應(yīng)用程序內(nèi)部的,通常不作為媒體文件對用戶展示。

context.getObbDir()

獲取路徑:/storage/emulated/0/Android/obb/應(yīng)用包名

返回到應(yīng)用程序特定目錄的絕對路徑??赡芊祷豊ULL。不需要額外權(quán)限。

context.getNoBackupFilesDir()

獲取路徑:/data/user/0/應(yīng)用包名/no_backup

不會(huì)自動(dòng)備份到遠(yuǎn)程存儲(chǔ)的應(yīng)用程序文件的路徑。需要判斷Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP(21)。

context.getCodeCacheDir()

獲取路徑:/data/user/0/應(yīng)用包名/code_cache

保存應(yīng)用程序代碼緩存文件的目錄路徑。適合在運(yùn)行時(shí)存放應(yīng)用產(chǎn)生的編譯或者優(yōu)化的代碼。不需要額外權(quán)限。需要判斷Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP(21)。

context.getDataDir()

獲取路徑:/data/user/0/應(yīng)用包名

返回文件系統(tǒng)目錄的絕對路徑,所有屬于該應(yīng)用程序的私有文件都存儲(chǔ)在文件系統(tǒng)中。應(yīng)用程序不應(yīng)該直接使用這個(gè)路徑,
而是應(yīng)該在這個(gè)類上使用{getFilesDir()}、{getCacheDir()}、{getDir(String, int)}或其他存儲(chǔ)API。
需要判斷Build.VERSION.SDK_INT >= Build.VERSION_CODES.N(24)

context.getPackageCodePath()

獲取路徑:/data/app/應(yīng)用包名-xxxxx/base.apk

此上下文的主Android包的完整路徑。這對應(yīng)用程序通常沒有用處,因?yàn)樗鼈儾粦?yīng)該直接訪問文件系統(tǒng)。

context.getPackageResourcePath()

獲取路徑:/data/app/應(yīng)用包名-xxxxx/base.apk

基本跟mContext.getPackageCodePath()相同。

Environment

存儲(chǔ)狀態(tài)

存儲(chǔ)狀態(tài) 描述
MEDIA_UNKNOWN Unknown storage state, such as when a path isn't backed by known storage media.
MEDIA_REMOVED Storage state if the media is not present.存儲(chǔ)媒體被移除
MEDIA_UNMOUNTED Storage state if the media is present but not mounted. 存儲(chǔ)媒體沒有掛載
MEDIA_CHECKING Storage state if the media is present and being disk-checked.
MEDIA_NOFS Storage state if the media is present but is blank or is using an unsupported filesystem.空白或是不支持的文件系統(tǒng)
MEDIA_MOUNTED Storage state if the media is present and mounted at its mount point with read/write access.存儲(chǔ)媒體已經(jīng)掛載,并且可讀/寫
MEDIA_MOUNTED_READ_ONLY Storage state if the media is present and mounted at its mount point with read-only access.存儲(chǔ)媒體已經(jīng)掛載,只讀。
MEDIA_SHARED Storage state if the media is present not mounted, and shared via USB mass storage.存儲(chǔ)媒體正在通過USB共享
MEDIA_BAD_REMOVAL Storage state if the media was removed before it was unmounted.在沒有掛載前存儲(chǔ)媒體已經(jīng)被移除
MEDIA_UNMOUNTABLE Storage state if the media is present but cannot be mounted. Typically this happens if the file system on the media is corrupted.存儲(chǔ)媒體無法掛載
MEDIA_EJECTING Storage state if the media is in the process of being ejected.存儲(chǔ)媒體處于被彈出的過程

標(biāo)準(zhǔn)存儲(chǔ)目錄

標(biāo)準(zhǔn)存儲(chǔ)目錄 目錄
DIRECTORY_MUSIC Music 目錄中的任何音頻文件應(yīng)該放在常規(guī)的音樂列表中供用戶使用。
DIRECTORY_PODCASTS Podcasts 可放置任何音頻文件,應(yīng)該在用戶可以選擇的播客列表中(而不是常規(guī)音樂)。
DIRECTORY_RINGTONES Ringtones 可放置任何音頻文件,應(yīng)該在用戶可以選擇的鈴聲列表中(而不是常規(guī)音樂)。
DIRECTORY_ALARMS Alarms 可放置任何音頻文件,應(yīng)該在用戶可以選擇的鬧鈴列表中(而不是常規(guī)音樂)。
DIRECTORY_NOTIFICATIONS Notifications 可放置任何音頻文件,應(yīng)該在用戶可以選擇的通知提醒列表中(而不是常規(guī)音樂)。
DIRECTORY_PICTURES Pictures 其中放置可供用戶使用的圖片文件。
DIRECTORY_MOVIES Movies 其中放置可供用戶使用的視頻文件。
DIRECTORY_DOWNLOADS Download 其中放置用戶的下載文件
DIRECTORY_DCIM DCIM 傳統(tǒng)的安裝圖片和視頻的位置。
DIRECTORY_DOCUMENTS Documents 其中放置由用戶創(chuàng)建的文檔。

context.getExternalFilesDir(String type) 會(huì)返回/storage/emulated/0/Android/data/應(yīng)用包名/files/type指定目錄

image.png

Environment.getExternalStoragePublicDirectory(String type) 會(huì)返回/storage/emulated/0/type指定目錄

image.png

獲取路徑

  • Environment.getExternalStorageState() 獲取存儲(chǔ)狀態(tài)
  • Environment.getDataDirectory() : /data
  • Environment.getDownloadCacheDirectory() : /cache
  • Environment.getRootDirectory(): /system
  • Environment.getExternalStorageDirectory():
    返回路徑:/storage/emulated/0
    返回共享/外部存儲(chǔ)主目錄。如果用戶已經(jīng)掛載在他們的計(jì)算機(jī)上或者已經(jīng)從設(shè)備上刪除或者其他一些問題已經(jīng)發(fā)生,這個(gè)目錄現(xiàn)在可能是不可訪問的??梢杂?strong>Environment.getExternalStorageState() 確定其當(dāng)前狀態(tài)。
    傳統(tǒng)上,這是一個(gè)SD卡,但它也可以被實(shí)現(xiàn)為與被保護(hù)的內(nèi)部存儲(chǔ)區(qū)不同的設(shè)備中的內(nèi)置存儲(chǔ)器,并且可以作為計(jì)算機(jī)上的文件系統(tǒng)安裝。
    應(yīng)用程序不應(yīng)直接使用此頂級目錄,以避免污染用戶的根命名空間??梢酝ㄟ^Context.getExternalFilesDirs(String)、Context.getExternalCacheDirs() 等方法訪問二級存儲(chǔ)。任何應(yīng)用程序私有的文件都應(yīng)該放在Context.getExternalFilesDir 返回的目錄中,應(yīng)用程序被卸載時(shí)系統(tǒng)將負(fù)責(zé)刪除。

我的地址:https://wangshouz.github.io/2018/06/14/android-files/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容