Android提供以下四種存儲(chǔ)方式:

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出阿城免費(fèi)做網(wǎng)站回饋大家。
1.SharePreference
2.SQLite
3.File
4.ContentProvider
SharedPreference:
SharedPreference是一種輕型的數(shù)據(jù)存儲(chǔ)方式,實(shí)際上是基于XML文件存儲(chǔ)的“key-value”鍵值對(duì)數(shù)據(jù)。通常用來(lái)存儲(chǔ)程序的一些配置信息。其存儲(chǔ)在“data/data/程序包名/shared_prefs目錄下。
SharedPreference本身只能獲取數(shù)據(jù),不支持存儲(chǔ)和修改。存儲(chǔ)和修改要通過(guò)Editor對(duì)象來(lái)實(shí)現(xiàn)。
SQLite:
SQLite是一個(gè)輕量級(jí)關(guān)系型數(shù)據(jù)庫(kù),既然是關(guān)系型數(shù)據(jù)庫(kù),那操作起來(lái)其實(shí)跟mysql、sql
server差不多的。
需要注意的一點(diǎn)是,SQLite只有NULL、INTEGER、REAL(浮點(diǎn)數(shù))、TEXT(字符串)和BLOB(大數(shù)據(jù))五種類型,不存在BOOLEAN和DATE類型。
File:
常說(shuō)的文件(I/O)存儲(chǔ)方法,常用語(yǔ)存儲(chǔ)大數(shù)量的數(shù)據(jù),但是缺點(diǎn)是更新數(shù)據(jù)將是一件困難的事情。
ContentProvider:
ContentProvider相對(duì)于其它的方式比較復(fù)雜,當(dāng)然其功能相對(duì)于其它的方式也是革命性的改變。它能夠?qū)崿F(xiàn)跨應(yīng)用之間的數(shù)據(jù)操作。利用ContentResolver對(duì)象的delete、update、insert、query等方法去操ContentProvider的對(duì)象,讓ContentProvider對(duì)象的方法去對(duì)數(shù)據(jù)操作。
在使用File存儲(chǔ)App數(shù)據(jù)時(shí),我們需要了解Android系統(tǒng)的存儲(chǔ)系統(tǒng)。Android的存儲(chǔ)分為內(nèi)部存儲(chǔ)和外部存儲(chǔ)。
由于Android系統(tǒng)的廠商比較多,對(duì)于外部存儲(chǔ)目錄的定義有所不同,可能在根目錄下的mnt,sdcard和storage下。以storage為例,打開(kāi)emulated/0目錄,外部存儲(chǔ)目錄就出現(xiàn)了。雖然可以通過(guò)多種路徑打開(kāi)外部存儲(chǔ)文件,但是最終他們的路徑是相同的:
mnt:
storage:
sdcard:
外部存儲(chǔ)目錄下包含兩大類:公有目錄和私有目錄
私有目錄:
對(duì)比下來(lái)External有以下幾點(diǎn)優(yōu)點(diǎn):
缺點(diǎn):
內(nèi)部存儲(chǔ)與外部存儲(chǔ)權(quán)限申請(qǐng)對(duì)比如下:
首先我們要獲取外部存儲(chǔ)目標(biāo)文件的路徑:
然后確定自己需要?jiǎng)?chuàng)建的文件名,結(jié)合上面的到的路徑,創(chuàng)建一個(gè)File對(duì)象:
Android系統(tǒng)默認(rèn)數(shù)據(jù)清理的路徑是,內(nèi)部存儲(chǔ)目錄中相應(yīng)的cache文件夾中的文件和外部存儲(chǔ)中相應(yīng)的cache文件夾中的文件。
你的app的internal storage 目錄是以你的app的包名作為標(biāo)識(shí)存放在Android文件系統(tǒng)的特定目錄下[data/data/com.example.xx]。 從技術(shù)上講,如果你設(shè)置文件為可讀的,那么其他app就可以讀取你的internal文件。然而,其他app需要知道你的包名與文件名。若是你沒(méi)有設(shè)置為可讀或者可寫(xiě),其他app是沒(méi)有辦法讀寫(xiě)的。因此只要你使用MODE_PRIVATE ,那么這些文件就不可能被其他app所訪問(wèn)。
另外記住一點(diǎn),內(nèi)部存儲(chǔ)在你的APP卸載的時(shí)候,會(huì)一塊被刪除,因此,我們可以在cache目錄里面放置我們的圖片緩存,而且cache與files的差別在于,如果手機(jī)的內(nèi)部存儲(chǔ)空間不夠了,會(huì)自行選擇cache目錄進(jìn)行刪除,因此,不要把重要的文件放在cache文件里面,可以放置在files里面,因?yàn)檫@個(gè)文件只有在APP被卸載的時(shí)候才會(huì)被刪除。還有要注意的一點(diǎn)是,如果應(yīng)用程序是更新操作,內(nèi)部存儲(chǔ)不會(huì)被刪除,區(qū)別于被用戶手動(dòng)卸載。
不管你是使用 getExternalStoragePublicDirectory() 來(lái)存儲(chǔ)可以共享的文件,還是使用 getExternalFilesDir() 來(lái)儲(chǔ)存那些對(duì)于你的app來(lái)說(shuō)是私有的文件,有一點(diǎn)很重要,那就是你要使用那些類似DIRECTORY_PICTURES 的API的常量。那些目錄類型參數(shù)可以確保那些文件被系統(tǒng)正確的對(duì)待。例如,那些以DIRECTORY_RINGTONES 類型保存的文件就會(huì)被系統(tǒng)的media scanner認(rèn)為是ringtone而不是音樂(lè)。
在開(kāi)發(fā)中,不建議往內(nèi)部存儲(chǔ)中寫(xiě)太多的數(shù)據(jù),畢竟空間有限。外部存儲(chǔ)在使用的時(shí)候最好能夠?qū)⑽募娣旁谒接心夸浵拢@樣有利于系統(tǒng)維護(hù),也避免用戶的反感。
徹底理解android中的內(nèi)部存儲(chǔ)與外部存儲(chǔ)
Android存儲(chǔ)挖坑記
緩存文件可以放在哪里?它們各自的特點(diǎn)是什么
分為:內(nèi)部存儲(chǔ)和外部存儲(chǔ)
如何區(qū)分內(nèi)部存儲(chǔ)和外部存儲(chǔ):可以從物理和邏輯區(qū)分
從物理的角度區(qū)分,內(nèi)部存儲(chǔ)就是手機(jī)自帶存儲(chǔ)空間,外部存儲(chǔ)就是外部接入的存儲(chǔ)空間例如SD卡
從邏輯意義上區(qū)分,data,system 目錄就是手機(jī)的內(nèi)部存儲(chǔ),而 mnt 或者 storage目錄下的sdcard0指向的sdcard目錄就是外部存儲(chǔ)。如果是手機(jī)自帶的外部存儲(chǔ)被稱為機(jī)身外部存儲(chǔ),外置的SD卡則稱之為外部存儲(chǔ)。當(dāng)然兩者都稱為外部存儲(chǔ)也沒(méi)關(guān)系。這里描述的內(nèi)部存儲(chǔ)和機(jī)身外部存儲(chǔ)都屬于機(jī)身存儲(chǔ);
邏輯區(qū)分是從4.4以上版本開(kāi)始的;
獲取內(nèi)部存儲(chǔ)路徑和api對(duì)應(yīng)關(guān)系
1,通過(guò)Environment
2,通過(guò)上下文Context
Build.VERSION_CODES.LOLLIPOP及以上版本新增的API
Build.VERSION_CODES.N及以上版本新增的API
特點(diǎn):
1、內(nèi)部存儲(chǔ)路徑中的文件是分類存儲(chǔ)的,我們無(wú)法干涉,除了cache目錄,別的目錄系統(tǒng)不會(huì)自動(dòng)創(chuàng)建
2、除了files目錄,別的目錄我們幾乎都是無(wú)法手動(dòng)操作的
3、別的App幾乎無(wú)法訪問(wèn)內(nèi)部存儲(chǔ)中的數(shù)據(jù),除了用非法手段或者我們主動(dòng)暴露
4、內(nèi)部存儲(chǔ)目錄下的文件夾及文件會(huì)隨著app的卸載而被系統(tǒng)自動(dòng)刪除
外部存儲(chǔ)又可分為共有目錄和私有目錄;
私有目錄
私有目錄:不需要訪問(wèn)權(quán)限
Android 在外部存儲(chǔ)空間中也提供了特殊目錄供App存放私有文件,該路徑為:/storage/emulated/0/Android/data/包名/
注意:應(yīng)用安裝之后/storage/emulated/0/Android/data/是沒(méi)有對(duì)應(yīng)的應(yīng)用文件夾的,需要手動(dòng)調(diào)用對(duì)應(yīng)的API創(chuàng)建;
獲取私有目錄路徑
共有目錄
共有目錄:需要申請(qǐng)權(quán)限才能訪問(wèn)
權(quán)限:6.0以上需要?jiǎng)討B(tài)申請(qǐng)
獲取共有目錄的API 29中已過(guò)時(shí):
??在平常使用Android手機(jī)的時(shí)候,我們都知道,幾乎每一個(gè)app都在/data/data/相應(yīng)的包名的文件夾下保存數(shù)據(jù)。那這些數(shù)據(jù)怎么進(jìn)行保存的呢?在這里,將簡(jiǎn)單的介紹一下。
??Context類中有一個(gè)openFileOutPut方法,這個(gè)方法可以將我們的數(shù)據(jù)保存在data目錄下的文件里面。
??openFileOutput(String name, int mode)方法中帶兩個(gè)參數(shù),第一個(gè)參數(shù)是文件名,這里只能寫(xiě)文件的名字,不能包含路徑,因?yàn)樗械臄?shù)據(jù)都保存在/data/data/應(yīng)用包名/files/目錄下;第二個(gè)參數(shù)是文件的操作模式,有MDOE_PRIVATE,MODE_APPEND,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。
??其中MODE_PRIVATE模式的是默認(rèn)的操作模式,每一次寫(xiě)入的內(nèi)容時(shí),都會(huì)覆蓋前面的內(nèi)容;MODE_APPEND模式表示的是每次寫(xiě)入的內(nèi)容追加在前面的后面;MODE_WORLD_READABLE表示的是其他應(yīng)用程序可以對(duì)該文件進(jìn)行寫(xiě)的操作;MODE_WORLD_WRITEABLE表示的是其他應(yīng)用程序可以對(duì)該文件進(jìn)行讀的操作。不過(guò)在后面的兩種模式過(guò)于危險(xiǎn),google已經(jīng)在Android 4.2中廢棄了。
??openFileOutput()方法返回的是一個(gè)FileOutPutStream的對(duì)象,得到了這個(gè)對(duì)象,就可以使用Java的IO流來(lái)對(duì)文件的使用了。
??點(diǎn)擊保存過(guò)后,就會(huì)把我們的數(shù)據(jù)保存在data目錄下。
??如果我們想要查看的話,就可以在Android studio(我是2.3.2的版本)中找到Tools-Android-Android Device Monitor
??再打開(kāi)/data/data/應(yīng)用包名/files/,發(fā)現(xiàn)有一個(gè)文件,就是我們之前創(chuàng)建的一個(gè)文件。
??我們可以點(diǎn)擊右上角的圖標(biāo)進(jìn)行相應(yīng)的導(dǎo)出工作,對(duì)相應(yīng)的文件進(jìn)行導(dǎo)出操作。
??在Context類中,與openFileOutput方法對(duì)應(yīng)的是openFileInput方法,用戶從data目錄讀取相應(yīng)的數(shù)據(jù)。這個(gè)方法相較于openFileOutput方法簡(jiǎn)單一些。
效果示意圖:
名稱欄目:android存儲(chǔ),android存儲(chǔ)訪問(wèn)框架
文章轉(zhuǎn)載:http://chinadenli.net/article27/dsgoicj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站收錄、網(wǎng)站維護(hù)、Google、定制開(kāi)發(fā)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)