

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ù)制代碼