[TOC]
1.內(nèi)部存儲
data文件夾就是我們常說的內(nèi)部存儲,當我們打開data文件夾之后(沒有root的手機不能打開該文件夾),里邊有兩個文件夾值得我們關(guān)注,如下:


一個文件夾是app文件夾,還有一個文件夾就是data文件夾,app文件夾里存放著我們所有安裝的app的apk文件,其實,當我們調(diào)試一個app的時候,可以看到控制臺輸出的內(nèi)容,有一項是uploading .....就是上傳我們的apk到這個文件夾,上傳成功之后才開始安裝。另一個重要的文件夾就是data文件夾了,這個文件夾里邊都是一些包名,打開這些包名之后我們會看到這樣的一些文件:
- data/data/包名/shared_prefs
- data/data/包名/databases
- data/data/包名/files
- data/data/包名/cache
如果打開過data文件,應(yīng)該都知道這些文件夾是干什么用的,我們在使用sharedPreferenced的時候,將數(shù)據(jù)持久化存儲于本地,其實就是存在這個文件中的xml文件里,我們App里邊的數(shù)據(jù)庫文件就存儲于databases文件夾中,還有我們的普通數(shù)據(jù)存儲在files中,緩存文件存儲在cache文件夾中,存儲在這里的文件我們都稱之為內(nèi)部存儲。
2.外部存儲
外部存儲才是我們平時操作最多的,外部存儲一般就是我們上面看到的storage文件夾,當然也有可能是mnt文件夾,這個不同廠家有可能不一樣。
一般來說,在storage文件夾中有一個sdcard文件夾,這個文件夾中的文件又分為兩類,一類是公有目錄,還有一類是私有目錄,其中的公有目錄有九大類,比如DCIM、DOWNLOAD等這種系統(tǒng)為我們創(chuàng)建的文件夾,私有目錄就是android這個文件夾,這個文件夾打開之后里邊有一個data文件夾,打開這個data文件夾,里邊有許多包名組成的文件夾。
3. 操作存儲空間
首先,經(jīng)過上面的分析,大家已經(jīng)明白了,什么是內(nèi)部存儲,什么是外部存儲,以及這兩種存儲方式分別存儲在什么位置,一般來說,我們不會自己去操作內(nèi)部存儲空間,沒有root權(quán)限的話,我們也沒法操作內(nèi)部存儲空間,事實上內(nèi)部存儲主要是由系統(tǒng)來維護的。不過在代碼中我們是可以訪問到這個文件夾的。由于內(nèi)部存儲空間有限,在開發(fā)中我們一般都是操作外部存儲空間,Google官方建議我們App的數(shù)據(jù)應(yīng)該存儲在外部存儲的私有目錄中該App的包名下,這樣當用戶卸載掉App之后,相關(guān)的數(shù)據(jù)會一并刪除,如果你直接在/storage/sdcard目錄下創(chuàng)建了一個應(yīng)用的文件夾,那么當你刪除應(yīng)用的時候,這個文件夾就不會被刪除。
經(jīng)過以上的介紹,我們可以總結(jié)出下面一個表格:

一目了然,什么是內(nèi)部存儲,什么是外部存儲。
如果按照路徑的特征,我們又可以將文件存儲的路徑分為兩大類,一類是路徑中含有包名的,一類是路徑中不含有包名的,含有包名的路徑,因為和某個App有關(guān),所以對這些文件夾的訪問都是調(diào)用Context里邊的方法,而不含有包名的路徑,和某一個App無關(guān),我們可以通過Environment中的方法來訪問。如下圖:
