注意:本篇文章是本人閱讀相關(guān)文章所寫(xiě)下的總結(jié),方便以后查閱,所有內(nèi)容非原創(chuàng),侵權(quán)刪。
文章內(nèi)容來(lái)自:
android應(yīng)用相關(guān)目錄的存取方式與函數(shù)解析---全
前言
當(dāng)進(jìn)行文件讀取時(shí),常見(jiàn)的問(wèn)題有:
1.文件保存到哪里?
2.相關(guān)函數(shù)是什么?目錄權(quán)限?
3.刪除應(yīng)用后目錄是否會(huì)隨之刪除?
目錄
一般存儲(chǔ)的路徑有三種:
/data/data/package_name/ (會(huì)隨著應(yīng)用的卸載一起刪除掉)【內(nèi)部存儲(chǔ)】
--1.1 xxx/shared_prefs/ 存儲(chǔ)SharedPreference
--1.2 xxx/databases/ 存儲(chǔ)數(shù)據(jù)庫(kù)DB (待補(bǔ))
--1.3 xxx/app_webview 存儲(chǔ)webview相關(guān) (待補(bǔ))
--1.4 xxx/lib 存儲(chǔ).so靜態(tài)庫(kù)文件 (待補(bǔ))
--1.5 xxx/cache getCacheDir() 存放臨時(shí)
--1.6 xxx/files 文件存儲(chǔ) getFilesDir() openFileInput openFileOutput 存放長(zhǎng)久
--1.7 xxx/custom 創(chuàng)建自己的目錄 getDir()SD卡Android目錄下的2個(gè)子目錄(會(huì)隨著應(yīng)用的卸載一起刪除掉) 【外部存儲(chǔ)】
--2.1 /mnt/sdcard/Android/data/package_name/
----2.1.1 xxx/files/ getExternalFilesDir() 存放長(zhǎng)久
----2.1.2 xxx/cache/ getExternalCacheDir() 存放臨時(shí)
--2.2 Android/obb/package_name/SD卡自定義的文件目錄(卸載應(yīng)用之后不會(huì)刪除) 【外部存儲(chǔ)】 SD卡自定義存儲(chǔ)
--/mnt/sdcard/
附錄:getXXX函數(shù)們的區(qū)別
1./data/data/package_name/
該目錄是只對(duì)應(yīng)用可見(jiàn)的,而且如果手機(jī)沒(méi)有root,用adb也是看不了這個(gè)目錄。
該目錄用來(lái)存儲(chǔ)和應(yīng)用周期相關(guān)的文件,會(huì)隨著應(yīng)用的卸載一起刪除掉。
1.1 xxx/shared_prefs/ 存儲(chǔ)SharedPreference
/data/data/package_name/shared_prefs/
SharedPreference存儲(chǔ)操作看Android存儲(chǔ)技術(shù)初級(jí)篇的2.SharedPreference存儲(chǔ)
1.2 xxx/databases/ 存儲(chǔ)數(shù)據(jù)庫(kù)DB
/data/data/package_name/databases/
相關(guān)函數(shù)還有g(shù)etDatabasePath()
1.3 xxx/app_webview 存儲(chǔ)webview相關(guān)
/data/data/package_name/app_webview
/data/data/package_name/xxxwebviewcachexxx
用來(lái)存儲(chǔ)應(yīng)用內(nèi)置webview所產(chǎn)生的cache和cookies等,該目錄由于android版本不同名字和位置也可能不同
1.4 xxx/lib 存儲(chǔ).so靜態(tài)庫(kù)文件
/data/data/package_name/lib
用來(lái)存儲(chǔ)該應(yīng)用的.so靜態(tài)庫(kù)文件
1.5 xxx/cache
/data/data/package_name/cache
該目錄可以使用函數(shù)getCacheDir()獲取
1.6 xxx/files
/data/data/package_name/files
該目錄可以使用函數(shù)getFilesDir()獲取,
openFileInput()和openFileOutput()函數(shù)也是在該目錄下操作文件,
fileList()函數(shù)是用來(lái)列出該files目錄下的所有文件,
deleteFile(String name)用來(lái)刪除該files目錄下的文件
openFileInput()和openFileOutput()函數(shù)如何進(jìn)行操作看Android存儲(chǔ)技術(shù)初級(jí)篇的1.文件存儲(chǔ)
1.7 xxx/custom 創(chuàng)建自己的目錄
/data/data/package_name/ 這個(gè)目錄下面當(dāng)然也能夠創(chuàng)建子集的目錄,使用的方法就是getDir(String name, int mode),參數(shù)中的name就是需要在該目錄下創(chuàng)建的子目錄名字
2. SD卡Android目錄下的2個(gè)子目錄
該目錄是掛載到SD卡(/mnt/sdcard/ )下面的,所以SD不可用時(shí),這兩個(gè)目錄都是無(wú)效的.
同樣和應(yīng)用周期相關(guān)的文件,會(huì)隨著應(yīng)用的卸載一起刪除掉.
注意需要權(quán)限
2.1 /mnt/sdcard/Android/data/package_name/
2.1.1 xxx/files/
Android/data/package_name/files/
該目錄可用getExternalFilesDir(String type)和getExternalFilesDirs(String type)獲取,參數(shù)type為子目錄名字,null則為根目錄,后者調(diào)用之后會(huì)自動(dòng)生成該目錄
2.1.2 xxx/cache/
Android/data/package_name/cache/
該目錄可用getExternalCacheDir()和getExternalCacheDirs()獲取,后者調(diào)用之后自動(dòng)生成該目錄
2.2 Android/obb/package_name/
obb目錄也可能不存在
該目錄的的相關(guān)函數(shù)簡(jiǎn)單只有兩個(gè):getObbDirs()和getObbDir(),前者調(diào)用之后會(huì)自動(dòng)生成該目錄,該目錄一般是游戲的數(shù)據(jù)包目錄
3. SD卡自定義的文件目錄
除了上邊兩個(gè)目錄之外,當(dāng)然還能在SD卡下自定義目錄,一般用來(lái)永久存儲(chǔ),卸載應(yīng)用之后不會(huì)刪除。
相關(guān)函數(shù)如下:
//這個(gè)函數(shù)用來(lái)獲取SD卡的掛載狀態(tài)
//如果傳入?yún)?shù)path則是獲取該路徑的的掛載狀態(tài)
//如果這個(gè)目錄被用戶的PC掛載,或者從設(shè)備中移除,或者其他問(wèn)題發(fā)生,狀態(tài)的返回是不一樣的
Environment.getExternalStorageState();
//該函數(shù)用來(lái)返回SD卡的根目錄 即/storage/emulated/0/
//注意不要在根目錄下創(chuàng)建文件,一定要?jiǎng)?chuàng)建一個(gè)子目錄去操作,要不然會(huì)污染SD卡的主目錄
//該目錄所有應(yīng)用都可操作,為共享目錄
Environment.getExternalStorageDirectory()
//該函數(shù)用來(lái)返回SD卡下面的下載緩存目錄
Environment.getDownloadCacheDirectory()
//該函數(shù)用來(lái)獲取用戶的數(shù)據(jù)目錄
Environment.getDataDirectory()
//函數(shù)用來(lái)根據(jù)類(lèi)型返回相關(guān)目錄,類(lèi)型為Environment的一些變量
//傳入的類(lèi)型參數(shù)不能是null,返回的目錄路徑有可能不存在,所以必須在使用之前確認(rèn)一下,沒(méi)有就創(chuàng)建該目錄
Environment.getExternalStoragePublicDirectory(String type)
//該函數(shù)用來(lái)返回根System目錄,只掛載為只讀
Environment.getRootDirectory()
SD卡自定義的文件目錄的操作看Android存儲(chǔ)技術(shù)初級(jí)篇的4.SD卡存儲(chǔ)
附錄:getXXX函數(shù)們的區(qū)別
圖片來(lái)自Android文件存儲(chǔ)路徑getFilesDir()與getExternalFilesDir的區(qū)別

Context.getExternalFilesDir()一般放一些長(zhǎng)時(shí)間保存的數(shù)據(jù)
Context.getExternalCacheDir()一般存放臨時(shí)緩存數(shù)據(jù)
設(shè)置->應(yīng)用->應(yīng)用詳情里面的”清除數(shù)據(jù)“與”清除緩存“選項(xiàng)分別對(duì)應(yīng)的是data/data/<application package>/和data/data/<application package>/cache