File自定義路徑

bcf9420a-4a8f-43b2-b6b2-e40b8329d36a.png
7a18ffab-8f96-4480-849c-e08eda868371.png

1.context.getCacheDir();

應(yīng)用內(nèi)部存儲(chǔ)空間(數(shù)據(jù)文件私有),當(dāng)我們的文件存儲(chǔ)在這個(gè)文件下,是不需要申請(qǐng)權(quán)限;當(dāng)應(yīng)用被卸載的時(shí)候目錄下的文件也會(huì)跟著被刪除。

注意:這個(gè)文件的目錄和應(yīng)用的存儲(chǔ)位置有關(guān)系,當(dāng)我們的應(yīng)用移動(dòng)到外部存儲(chǔ)空間的時(shí)候,文件的絕對(duì)路徑是變化的,所以我們?cè)谑褂玫臅r(shí)候我們盡量使用----相對(duì)路徑

這個(gè)目錄和getFilesDir()不同之處就在于,當(dāng)系統(tǒng)的存儲(chǔ)空間比較少的時(shí)候,系統(tǒng)會(huì)自動(dòng)刪除這個(gè)目錄下的文件。
按照google官方的說法是,超過1MB的文件就最好存儲(chǔ)在getExternalCacheDir()里面。

context.getCacheDir().getPath輸出路徑為:

/data/data/包名/cache 

2.context.getFilesDir();

應(yīng)用內(nèi)部存儲(chǔ)空間(數(shù)據(jù)文件私有),當(dāng)我們的文件存儲(chǔ)在這個(gè)文件下,是不需要申請(qǐng)權(quán)限;當(dāng)應(yīng)用被卸載的時(shí)候目錄下的文件也會(huì)跟著被刪除。

注意:這個(gè)文件的目錄和應(yīng)用的存儲(chǔ)位置有關(guān)系,當(dāng)我們的應(yīng)用移動(dòng)到外部存儲(chǔ)空間的時(shí)候,文件的絕對(duì)路徑是變化的,所以我們?cè)谑褂玫臅r(shí)候我們盡量使用----相對(duì)路徑

系統(tǒng)提供了一個(gè)訪問該路徑的方法:

context.openFileOutput(string , int)  or  context.openFileInput(string , int) 
.
(1)string參數(shù): 文件名
(2)int參數(shù)
    Context.MODE_PRIVATE    = 0
    Context.MODE_APPEND    =  32768
    Context.MODE_WORLD_READABLE =  1
    Context.MODE_WORLD_WRITEABLE =  2

context.getCacheDir().getPath輸出路徑為:

/data/data/包名/files

3.context.getExternalCacheDir();

應(yīng)用外部存儲(chǔ)空間(數(shù)據(jù)文件私有,系統(tǒng)媒體文件無法訪問(例如存了一個(gè)MP3文件,通過系統(tǒng)的文件夾管理系統(tǒng),無法找到)),
當(dāng)應(yīng)用被卸載的時(shí)候,目錄下的文件會(huì)被刪除,但是這里和getCacheDir()還有不同之處:
只有手機(jī)系統(tǒng)使用的是虛擬外部存儲(chǔ)的時(shí)候,
才可以在卸載應(yīng)用的同時(shí),自動(dòng)刪除該目錄下的文件,如果是之前的物理存儲(chǔ)(物理SD卡)則不會(huì)自動(dòng)刪除該目錄,及目錄下的文件。
在使用的時(shí)候,需要判斷外部存儲(chǔ)的掛載狀態(tài)(getExternalStorageState(File)),還需要申請(qǐng)讀寫權(quán)限(READ_EXTERNAL_STORAGE,
WRITE_EXTERNAL_STORAGE)

注:當(dāng)其他應(yīng)用擁有SD卡讀寫權(quán)限的時(shí)候,可以訪問該目錄下的文件

context.getExternalCacheDir().getPath輸出路徑為:

/mnt/sdcard/Android/data/包名/cache 

4.context.getExternalFileDir();

應(yīng)用外部存儲(chǔ)空間(數(shù)據(jù)文件私有,系統(tǒng)媒體文件無法訪問(例如存了一個(gè)MP3文件,通過系統(tǒng)的文件夾管理系統(tǒng),無法找到)),
當(dāng)應(yīng)用被卸載的時(shí)候,目錄下的文件會(huì)被刪除,但是這里和getFilesDir()還有不同之處:
只有手機(jī)系統(tǒng)使用的是虛擬外部存儲(chǔ)(虛擬SD卡)的時(shí)候,
才可以在卸載應(yīng)用的同時(shí),自動(dòng)刪除該目錄下的文件,如果是之前的物理存儲(chǔ)(物理SD卡)則不會(huì)自動(dòng)刪除該目錄,及目錄下的文件
在使用的時(shí)候,需要判斷外部存儲(chǔ)的掛載狀態(tài)(getExternalStorageState(File)),還需要申請(qǐng)讀寫權(quán)限(READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE)

注:當(dāng)其他應(yīng)用擁有SD卡讀寫權(quán)限的時(shí)候,可以訪問該目錄下的文件

context.getExternalFileDir().getPath()輸出路徑為:

/mnt/sdcard/Android/data/包名/files

5.Environment.getExternalStorageDirectory();

應(yīng)用外部存儲(chǔ)空間(數(shù)據(jù)文件非私有,可以被手機(jī)的系統(tǒng)程序訪問(如MP3格式的文件,會(huì)被手機(jī)系統(tǒng)檢索出來),同樣,該目錄下的文件,
所有的APP程序也都是可以訪問的,)

注意:外部存儲(chǔ)空間可能處于不可訪問狀態(tài),或者已經(jīng)被移除狀態(tài),或者存儲(chǔ)空間損壞無法訪問等問題。可以通過getExternalStorageState() 這個(gè)方法來判斷外部存儲(chǔ)空間的狀態(tài)。

注:在該目錄下讀寫文件,需要獲取讀寫權(quán)限

該目錄下的文件,這個(gè)目錄是用戶進(jìn)行操作的一個(gè)根目錄,進(jìn)入二級(jí)目錄可以通過
getExternalFilesDirs(String), getExternalCacheDirs(), and getExternalMediaDirs().這些方法

官方建議,不要直接使用該目錄,為了避免污染用戶的根命名空間,應(yīng)用私有的數(shù)據(jù),應(yīng)該放在 Context.getExternalFilesDir目錄下其他的可以被分享的文件,可以放在getExternalStoragePublicDirectory(String).目錄下

Environment.getExternalStorageDirectory().getPath()輸出目錄為: 
/mnt/sdcard 

6.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

應(yīng)用外部存儲(chǔ)空間(數(shù)據(jù)文件非私有,可以被手機(jī)的系統(tǒng)程序訪問(如MP3格式的文件,會(huì)被手機(jī)系統(tǒng)檢索出來),同樣,該目錄下的文件,
所有的APP程序也都是可以訪問的,)

這個(gè)目錄是用來存放各種類型的文件的目錄,在這里用戶可以分類管理不同類型的文件(例如音樂、圖片、電影等);
類型如下: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS,
DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, or DIRECTORY_DOCUMENTS

Environment.getExternalStoragePublicDirectory("test").getPath()輸出路徑:

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

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

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