context獲取路徑

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指定目錄

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

獲取路徑
- 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é)刪除。