Android 各種路徑詳細說明

2021-08-18 04:14:29 字數 2683 閱讀 6929

儲存分類:

內部儲存路徑,

內部快取儲存路徑,

外部儲存路徑,

外部快取儲存路徑

在有些手機上內部劃出乙個內部的sdcard路徑和內部儲存路徑,

當有sdcard時候,就有了六個路徑

內部儲存空間中的應用私有目錄**外部儲存空間中的應用私有目錄 **

考慮內部儲存空間容量有限,(官方建議是,超過1mb的檔案,建議儲存到getexternalcachedir()目錄下)普通使用者不能直接直觀地檢視目錄檔案等其他原因,android 在外部儲存空間中也提供有特殊目錄**用存放私有檔案,檔案路徑為:

/storage/emulated/0/android/data/包名

備註:一般裝置都有內建 sd 卡,同時也提供外部 sd 卡拓展,可能對應路徑的目錄名有所差異。

值得注意的是,與內部儲存空間的應用私有目錄不同的是:

只有手機系統使用的是虛擬外部儲存(虛擬sd卡,現在絕大多數的手機,都不用外掛程式物理sd卡了)的時候,

才可以在解除安裝應用的同時,自動刪除該目錄下的檔案,如果是之前的物理儲存(物理sd卡)則不會自動刪除該目錄,及目錄下的檔案。

android sdk 中也提供有便捷的 api 供開發人員直接操作外部儲存空間下的應用私有目錄:

當然,也可以通過 environment 類間接操作,只不過需要向使用者申請操作許可權

environment.getexternalstoragedirectory(); 對應/storage/sdcard0

類似於 file 和 cache 預設分類目錄,開發人員也可以在應用私有目錄中建立屬於自己的自定義目錄,方便於分類儲存應用相關檔案。

關於environment.getexternalstoragedirectory();做一些說明:

其他的可以被分享的檔案,可以放在getexternalstoragepublicdirectory(string).目錄下

值得注意的一點是,對於外部儲存空間下的應用私有目錄檔案,由於普通使用者可以自由修改和刪除,開發人員在使用時,一定要做好判空處理和異常捕獲,防止應用崩潰退出!

外部儲存空間中的公共目錄顯然,無論是內部儲存空間,還是外部儲存空間,上述兩個應用私有目錄由於其特有的生命週期(隨著應用解除安裝而自動清除)只適合儲存應用相關資料。

或者從訪問許可權上來說,應用無關資料應該是宿主應用希望與其他應用共享這些資料的,應該存放在外部儲存空間的公共目錄資料夾下。

外部儲存空間已經為使用者預設分類出一些公共目錄。開發人員可以通過 environment 類提供的方法直接獲取相應目錄的絕對路徑,傳遞不同的 type 引數型別即可:

environment.getexternalstoragepublicdirectory(string type);

envinonment 類提供諸多 type 引數的常量,比如:

面對如此諸多的預設類別,開發人員在儲存自己應用的公共檔案時,也要養成良好的習慣,將要儲存的資料分門別類地儲存在不同公共目錄下。當然,你也可以在公共目錄下再次建立屬於自己應用的目錄,便於管理。

注意:訪問外部儲存空間時記得申請讀寫許可權!

外部儲存空間中的其他目錄一般來說,利用兩種應用私有目錄和公共目錄便能夠儲存應用中需要儲存的資料和檔案。如果這些還不夠的話,那一定是你的開發姿勢不對。在 code review 的前提下,如果還是不夠的話,還可以在外部儲存空間自由建立其他目錄,通過這個方式獲取外部儲存空間的絕對路徑,然後操作檔案:

environment.getexternalstoragedirectory();

小結使用應用私有目錄儲存應用相關資料,使用公共目錄儲存應用無關資料(共享資料)。無論哪種情況,都需要做好資料分類儲存,便於清除等統一管理。隨便開啟手機上的幾個應用,不難發現,很多應用都包含乙個清理快取的功能。事實上,開發人員清理的就是應用相關資料,也就是應用私有目錄下的檔案。

考慮到外部儲存空間上的內容可能被使用者手動刪除,或者解除安裝拓展 sd 卡等不可控因素,操作前記得使用 environment 類提供的 api 方法判斷容量是否充足、檔案是否存在等情況,做好異常捕獲,減少應用崩潰率。相信這一定是乙個良好的習慣

儲存路徑和快取儲存路徑的區別

快取路徑一般用於存放一些快取資料,當程式刪除的時候,快取資料夾也會隨之刪除,避免了程式在解除安裝之後殘留大量檔案。

內部快取路徑和外部快取路徑也有所區別,當系統的記憶體空間緊張時,內部快取路徑下的檔案會被刪除,但是沒有乙個嚴格的標準保障,應該對這些快取檔案占用的最大儲存空間設定個最大值,當實際超過這個值時,要對這些快取檔案做相應的清理工作 。但是系統不會觀察外部快取路徑下是否超出大小,要自己去做檔案清理機制。

內部快取路徑預設別的程式不能訪問檔案,所以一些私密的資料,別的應用是訪問不了的,如果需要系統或者其他應用訪問,可以通過修改openfileoutput()下的int mode引數讓別的應用也可以訪問。

內部快取路徑

內部的 /data/data/一般是看不到的,除非root

清除快取 context.getcachedir()

模擬器:內部快取路徑:/data/data/com.mocn.testin/cache/內部快取路徑.png

nexus5:內部快取路徑:/data/user/0/com.mocn.testin/cache/內部快取路徑.png

log

ANDROID相對布局詳細說明

relativelayout 相對布局 android layout above 將該控制項的底部至於給定id的控制項之上 android layout below 將該控制項的頂部至於給定id的控制項之下 android layout toleftof 將該控制項的右邊緣和給定id的控制項的左邊緣...

Android相對布局詳細說明

align left androidlayoutrelativelayout 相對布局 android layout above 將該控制項的底部至於給定id的控制項之上 android layout below 將該控制項的頂部至於給定id的控制項之下 android layout tolefto...

mysql 的各種檔案詳細說明

1 資料目錄 mysql show global variables like datadir variable name value datadir home mysqldata 1 row in set 0.00 sec innodb資料檔案。儲存innodb資料,索引,double write...