Android 文件存儲(chǔ)與SharedPreferences存儲(chǔ)方式詳解用法
持久化技術(shù)簡(jiǎn)介
數(shù)據(jù)持久化就是指將那些內(nèi)存中的瞬時(shí)數(shù)據(jù)保存到存儲(chǔ)設(shè)備中,保證即使在手機(jī)或計(jì)算機(jī)關(guān)機(jī)的情況下,這些數(shù)據(jù)也不會(huì)丟失。保存在內(nèi)存中的數(shù)據(jù)是處于瞬時(shí)狀態(tài)的,而保存在存儲(chǔ)設(shè)備的數(shù)據(jù)是處于持久狀態(tài)的。持久化技術(shù)提供了一種機(jī)制,可以讓數(shù)據(jù)在瞬時(shí)狀態(tài)和持久狀態(tài)之間進(jìn)行切換
文件存儲(chǔ)
1. 將數(shù)據(jù)存儲(chǔ)到文件中
文件存儲(chǔ)是 Android 中最基本的數(shù)據(jù)存儲(chǔ)方式,它不對(duì)存儲(chǔ)的內(nèi)容進(jìn)行格式化處理,所有數(shù)據(jù)都是原封不動(dòng)的保存到文件當(dāng)中,適合存儲(chǔ)一些簡(jiǎn)單的文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)
Context 類提供了一個(gè) openFileOutput() 方法,可以將數(shù)據(jù)存儲(chǔ)到指定的文件中
fun save(inputText: String) {
try {
val output = openFileOutput("data", Context.MODE_PRIVATE)
val writer = BufferedWriter(OutputStreamWriter(output))
writer.use {
it.write(inputText)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
openFileOutput() 方法接收兩個(gè)參數(shù):
- 第一個(gè)參數(shù)是文件名,在文件創(chuàng)建的時(shí)候使用。指定的文件名可以不包含路徑,因?yàn)樗械奈募寄J(rèn)存儲(chǔ)到 /data/data/<package name>/files/ 目錄下
- 第二個(gè)參數(shù)是文件的操作模式,主要有
MODE_PRIVATE和MODE_APPEND兩種模式可選,默認(rèn)是MODE_PRIVATE,表示當(dāng)指定相同文件名時(shí),所寫(xiě)入的內(nèi)容將會(huì)覆蓋原文件的內(nèi)容。而MODE_APPEND則表示如果文件存在,就往文件追加內(nèi)容
2. 從文件中讀取數(shù)據(jù)
類似于將數(shù)據(jù)存儲(chǔ)到文件中,Context 類提供了一個(gè) openFileInput() 方法,用于從文件中讀取數(shù)據(jù)
fun load(): String {
val content = StringBuilder()
try {
val input = openFileInput("data")
val reader = BufferedReader(InputStreamReader(input))
reader.use {
reader.forEachLine {
content.append(it)
}
}
} catch (e: IOException) {
e.printStackTrace()
}
return content.toString()
}
openFileInput() 方法只接收一個(gè)參數(shù),即要讀取的文件名,然后系統(tǒng)自動(dòng)到 /data/data/<package name>/files 目錄下加載這個(gè)文件
SharedPreferences 存儲(chǔ)
不同于文件存儲(chǔ),SharedPreferences 是使用鍵值對(duì)的方式來(lái)存儲(chǔ)數(shù)據(jù)的。也就是說(shuō),當(dāng)保存一條數(shù)據(jù)時(shí),需要給這條數(shù)據(jù)提供一個(gè)對(duì)應(yīng)的鍵。SharedPreferences 支持多種不同的數(shù)據(jù)類型存儲(chǔ)。
1. 將數(shù)據(jù)存儲(chǔ)到 SharedPreferences 中
要想使用 SharedPreferences,首先要獲得 SharedPreferences 對(duì)象。Android 中主要提供以下兩種方法用于得到 SharedPreferences 對(duì)象:
Context類中的getSharedPreferences()方法,此方法接收兩個(gè)參數(shù):第一個(gè)參數(shù)指定 SharedPreferences 文件的名稱,存放在 /data/data/<package name>/shared_prefs/ 目錄下;第二個(gè)參數(shù)指定操作模式,目前只有MODE_PRIVATE可選,表示只有當(dāng)前應(yīng)用程序才可以對(duì)這個(gè) SharedPreferences 文件進(jìn)行讀寫(xiě)Activity類中的getPreferences()方法,它只接受一個(gè)操作模式參數(shù),因?yàn)槭褂眠@個(gè)方法會(huì)自動(dòng)將當(dāng)前 Activity 的類名作為 SharedPreferences 的文件名
得到 SharedPreferences 對(duì)象之后,就可以開(kāi)始向 SharedPreferences 存儲(chǔ)數(shù)據(jù)了
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
editor.putString("name", "Tom")
editor.putInt("age", 28)
editor.putBoolean("married", false)
editor.apply()
}
}
2. 從 SharedPreferences 中讀取數(shù)據(jù)
SharedPreferences 對(duì)象提供了一系列 get 方法,用于讀取存儲(chǔ)的對(duì)應(yīng)類型的數(shù)據(jù)。這些 get 方法都接收兩個(gè)參數(shù):第一個(gè)參數(shù)是鍵,第二個(gè)參數(shù)是默認(rèn)值,表示傳入的鍵找不到對(duì)應(yīng)的值時(shí)以什么樣的默認(rèn)值來(lái)返回
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val prefs = getSharedPreferences("data", Context.MODE_PRIVATE)
val name = prefs.getString("name", "")
val age = prefs.getInt("age", 0)
val married = prefs.getBoolean("married", false)
}
}
到此這篇關(guān)于Android 文件存儲(chǔ)與SharedPreferences存儲(chǔ)方式詳解用法的文章就介紹到這了,更多相關(guān)Android 存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Android Material Design自定義動(dòng)畫(huà)的編寫(xiě)
這篇文章主要介紹了詳解Android Material Design自定義動(dòng)畫(huà)的編寫(xiě),其中對(duì)Activity的過(guò)渡動(dòng)畫(huà)進(jìn)行了重點(diǎn)講解,需要的朋友可以參考下2016-04-04
Android 實(shí)現(xiàn)帶頭部文字輸入框的自定義控件
這篇文章主要介紹了Android 實(shí)現(xiàn)帶頭部文字輸入框的自定義控件,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04
詳解Android獲取系統(tǒng)內(nèi)核版本的方法與實(shí)現(xiàn)代碼
這篇文章主要介紹了詳解Android獲取系統(tǒng)內(nèi)核版本的方法與實(shí)現(xiàn)代碼的相關(guān)資料,這里提供了具體實(shí)現(xiàn)獲取內(nèi)核的方法,需要的朋友可以參考下2017-07-07
Android自定義view實(shí)現(xiàn)水波紋進(jìn)度球效果
在我們的日常開(kāi)發(fā)中自定義控件還是用的挺多的,設(shè)計(jì)師或者產(chǎn)品為了更好的漂亮,美觀,交互都會(huì)做一些牛逼的ui效果圖,但是最后實(shí)現(xiàn)的還是我們程序員啊。所以說(shuō) 自定義view你還是得會(huì)的。2016-08-08
Android RecyclerView實(shí)現(xiàn)吸頂動(dòng)態(tài)效果流程分析
RecyclerView是Android一個(gè)更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動(dòng),也可以實(shí)現(xiàn)橫向滾動(dòng)(ListView做不到橫向滾動(dòng))。接下來(lái)講解RecyclerView的用法2022-12-12
Android實(shí)現(xiàn)動(dòng)態(tài)顯示或隱藏密碼輸入框的內(nèi)容
這篇文章主要介紹了Android實(shí)現(xiàn)動(dòng)態(tài)顯示或隱藏密碼輸入框的內(nèi)容,主要通過(guò)設(shè)置EditText的setTransformationMethod()方法來(lái)實(shí)現(xiàn),需要的朋友可以參考下2014-09-09
基于SurfaceView實(shí)現(xiàn)可拖動(dòng)視頻控件
這篇文章主要為大家詳細(xì)介紹了基于SurfaceView的可拖動(dòng)視頻控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
深入理解Android熱修復(fù)技術(shù)原理之so庫(kù)熱修復(fù)技術(shù)
通常情況下,大多數(shù)人希望android下熱補(bǔ)丁方案能夠做到補(bǔ)丁的全方位修復(fù),包括類修復(fù)/資源修復(fù)/so庫(kù)的修復(fù)。 這里主要介紹熱補(bǔ)丁之so庫(kù)修復(fù)思路2021-06-06
解決Error:All flavors must now belong to a named flavor dimens
這篇文章主要介紹了解決Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com,需要的朋友可以參考下2017-11-11

