在開發(fā)中一般會對手機的內(nèi)存進行操作中鼠,比如在使用應(yīng)用過程中產(chǎn)生的一些日志、圖片等信息蚊伞,我們有時候要對其進行必要的操作席赂,所以要對文件這一塊要有一個基礎(chǔ)的理解。
概念
1时迫、內(nèi)部存儲:
首先說明一個概念颅停,內(nèi)部存儲不是內(nèi)存,而是像磁盤一樣可以存儲數(shù)據(jù)的地方掠拳,他在手機內(nèi)部癞揉,屬于手機自帶內(nèi)存的一部分。
內(nèi)部存儲私有目錄
里面有一個 data/data 文件夾溺欧,下面存放是所有應(yīng)用程序的包名文件夾喊熟,這部分的內(nèi)容只有在手機 root 之后才能看得到,如果使用的是模擬器胧奔,可以在 Android Device Monitor
中看到逊移。
比如一個應(yīng)用的包名為 com.test.test
那么這個應(yīng)用只能訪問 /data/data/com.test.test
目錄下面的文件预吆,其他 data/data
目錄下面的文件這個應(yīng)用是訪問不到的
方法:
Environment.getDataDirectory();
獲取data根目錄getFilesDir()
方法用于獲取/data/data/<application package>/files
目錄getCacheDir()
方法用于獲取/data/data/<application package>/cache
目錄deleteFile()
刪除文件fileList()
列出所有文件
注意:當用戶卸載 App 時龙填,系統(tǒng)自動刪除 data/data 目錄下對應(yīng)包名的文件夾及其內(nèi)容。
2、外部存儲
這里不要被外部存儲幾個字所迷惑岩遗,這里說的外部存儲其實不單單指的外置的內(nèi)存卡扇商, Android 手機在出廠的時候的內(nèi)存,比如平常我們所說的 64G 宿礁、128G 內(nèi)存案铺,這個部分就是我們開發(fā)人員所說的外部存儲。
那我們往手機里面插入的內(nèi)存卡叫什么呢梆靖?
對的控汉,也是叫外部存儲。
在參考文章看到一句話:只要是能看得到返吻,都是外部存儲姑子。
外部存儲私有目錄
備注:一般設(shè)備都有內(nèi)置 SD 卡,同時也提供外部 SD 卡拓展测僵,可能對應(yīng)路徑的目錄名有所差異街佑。
如果沒有插入內(nèi)存卡的話,一般外部存儲的私有目錄就是:
/storage/emulated/0/Android/data/app package name
方法:
-
Environment.getExternalStorageDirectory();
獲取 SD 卡根目錄 -
getExternalFilesDir()
方法用于獲取/storage/emulated/0/Android/data/<application package>/files
目錄 -
getExternalCacheDir()
方法用于獲取/storage/emulated/0/Android/data/<application package>/cache
目錄
除了上面的files目錄和cache目錄捍靠,我們可以根據(jù)自己的分類建立其他的目錄沐旨,便于我們更好的管理
3、內(nèi)部存儲私有目錄 VS 外部存儲私有目錄
不同點
默認情況下榨婆,系統(tǒng)并不會自動創(chuàng)建外部存儲空間的應(yīng)用私有目錄磁携。只有在應(yīng)用需要的時候,開發(fā)人員通過 SDK 提供的 API 創(chuàng)建該目錄文件夾和操作文件夾內(nèi)容
自 Android 7.0 開始良风,系統(tǒng)對應(yīng)用私有目錄的訪問權(quán)限進一步限制颜武。其他 App 無法通過 file:// 這種形式的 Uri 直接讀寫該目錄下的文件內(nèi)容,而是通過 FileProvider 訪問
宿主 App 可以直接讀寫內(nèi)部存儲空間中的應(yīng)用私有目錄拖吼;而在 4.4 版本開始鳞上,宿主 App 才可以直接讀寫外部存儲空間中的應(yīng)用私有目錄,使開發(fā)人員無需在 Manifest 文件中或者動態(tài)申請外部存儲空間的文件讀寫權(quán)限
相同點
- 同屬于應(yīng)用私有目錄吊档,當用戶卸載 App 時篙议,系統(tǒng)也會自動刪除外部存儲空間下的對應(yīng) App 私有目錄文件夾及其內(nèi)容。
4怠硼、最后
內(nèi)部存儲私有目錄:
- SharedPreferences
- SQLiteDatabase
- App 中的 WebView 緩存頁面信息
不要往里面存放太多的數(shù)據(jù)
外部存儲私有目錄:
- 應(yīng)用自己使用的圖片等數(shù)據(jù)
- 緩存數(shù)據(jù)
- 日志數(shù)據(jù)
如果想被其他應(yīng)用訪問到的數(shù)據(jù)鬼贱,在 SD 卡的根目錄再新建一些文件夾,就不要寫在外部存儲私有目錄下面了香璃。
暫時寫這么多这难,以后開發(fā)過程中繼續(xù)填補。
參考文章: