context獲取路徑
context.getFilesDir()
獲取路徑:/data/user/0/應(yīng)用包名/files
包含應(yīng)用程序文件的目錄的路徑。不需要額外的權(quán)限來(lái)讀取或在返回的路徑下寫(xiě)入文件屉更。
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)限來(lái)讀取或在返回的路徑下寫(xiě)入文件御毅。
context.getExternalCacheDir()
獲取路徑:/storage/emulated/0/Android/data/應(yīng)用包名/cache
應(yīng)用程序特定目錄的絕對(duì)路徑根欧,與 mContext.getCacheDir() 相似,區(qū)別在于平臺(tái)并不總是監(jiān)視共享存儲(chǔ)中可用的空間端蛆,因此可能不會(huì)自動(dòng)刪除這些文件凤粗。這些文件是應(yīng)用程序內(nèi)部的,通常不作為媒體文件對(duì)用戶展示今豆。
context.getExternalFilesDir(String type)
獲取路徑:/storage/emulated/0/Android/data/應(yīng)用包名/files/type指定目錄(詳見(jiàn)下面Environment分析)
應(yīng)用程序特定目錄的絕對(duì)路徑嫌拣,與 mContext.getFilesDir() 相似。這些文件是應(yīng)用程序內(nèi)部的呆躲,通常不作為媒體文件對(duì)用戶展示异逐。
context.getObbDir()
獲取路徑:/storage/emulated/0/Android/obb/應(yīng)用包名
返回到應(yīng)用程序特定目錄的絕對(duì)路徑〔宓啵可能返回NULL灰瞻。不需要額外權(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)目錄的絕對(duì)路徑谢揪,所有屬于該應(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包的完整路徑。這對(duì)應(yīng)用程序通常沒(méi)有用處垦梆,因?yàn)樗鼈儾粦?yīng)該直接訪問(wèn)文件系統(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ǔ)媒體沒(méi)有掛載 |
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)掛載托猩,并且可讀/寫(xiě) |
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ǔ)媒體正在通過(guò)USB共享 |
MEDIA_BAD_REMOVAL | Storage state if the media was removed before it was unmounted.在沒(méi)有掛載前存儲(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ǔ)媒體無(wú)法掛載 |
MEDIA_EJECTING | Storage state if the media is in the process of being ejected.存儲(chǔ)媒體處于被彈出的過(guò)程 |
標(biāo)準(zhǔn)存儲(chǔ)目錄
標(biāo)準(zhǔn)存儲(chǔ)目錄 | 目錄 |
---|---|
DIRECTORY_MUSIC | Music 目錄中的任何音頻文件應(yīng)該放在常規(guī)的音樂(lè)列表中供用戶使用京腥。 |
DIRECTORY_PODCASTS | Podcasts 可放置任何音頻文件赦肃,應(yīng)該在用戶可以選擇的播客列表中(而不是常規(guī)音樂(lè))。 |
DIRECTORY_RINGTONES | Ringtones 可放置任何音頻文件,應(yīng)該在用戶可以選擇的鈴聲列表中(而不是常規(guī)音樂(lè))他宛。 |
DIRECTORY_ALARMS | Alarms 可放置任何音頻文件船侧,應(yīng)該在用戶可以選擇的鬧鈴列表中(而不是常規(guī)音樂(lè))。 |
DIRECTORY_NOTIFICATIONS | Notifications 可放置任何音頻文件厅各,應(yīng)該在用戶可以選擇的通知提醒列表中(而不是常規(guī)音樂(lè))镜撩。 |
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è)備上刪除或者其他一些問(wèn)題已經(jīng)發(fā)生围段,這個(gè)目錄現(xiàn)在可能是不可訪問(wèn)的⊥斗牛可以用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)直接使用此頂級(jí)目錄烙样,以避免污染用戶的根命名空間冯遂。可以通過(guò)Context.getExternalFilesDirs(String)谒获、Context.getExternalCacheDirs() 等方法訪問(wèn)二級(jí)存儲(chǔ)蛤肌。任何應(yīng)用程序私有的文件都應(yīng)該放在Context.getExternalFilesDir 返回的目錄中,應(yīng)用程序被卸載時(shí)系統(tǒng)將負(fù)責(zé)刪除批狱。