Android 文件存儲與SharedPreferences存儲方式詳解用法
持久化技術簡介
數(shù)據(jù)持久化就是指將那些內(nèi)存中的瞬時數(shù)據(jù)保存到存儲設備中,保證即使在手機或計算機關機的情況下,這些數(shù)據(jù)也不會丟失。保存在內(nèi)存中的數(shù)據(jù)是處于瞬時狀態(tài)的,而保存在存儲設備的數(shù)據(jù)是處于持久狀態(tài)的。持久化技術提供了一種機制,可以讓數(shù)據(jù)在瞬時狀態(tài)和持久狀態(tài)之間進行切換
文件存儲
1. 將數(shù)據(jù)存儲到文件中
文件存儲是 Android 中最基本的數(shù)據(jù)存儲方式,它不對存儲的內(nèi)容進行格式化處理,所有數(shù)據(jù)都是原封不動的保存到文件當中,適合存儲一些簡單的文本數(shù)據(jù)或二進制數(shù)據(jù)
Context 類提供了一個 openFileOutput() 方法,可以將數(shù)據(jù)存儲到指定的文件中
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() 方法接收兩個參數(shù):
- 第一個參數(shù)是文件名,在文件創(chuàng)建的時候使用。指定的文件名可以不包含路徑,因為所有的文件都默認存儲到 /data/data/<package name>/files/ 目錄下
- 第二個參數(shù)是文件的操作模式,主要有
MODE_PRIVATE和MODE_APPEND兩種模式可選,默認是MODE_PRIVATE,表示當指定相同文件名時,所寫入的內(nèi)容將會覆蓋原文件的內(nèi)容。而MODE_APPEND則表示如果文件存在,就往文件追加內(nèi)容
2. 從文件中讀取數(shù)據(jù)
類似于將數(shù)據(jù)存儲到文件中,Context 類提供了一個 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() 方法只接收一個參數(shù),即要讀取的文件名,然后系統(tǒng)自動到 /data/data/<package name>/files 目錄下加載這個文件
SharedPreferences 存儲
不同于文件存儲,SharedPreferences 是使用鍵值對的方式來存儲數(shù)據(jù)的。也就是說,當保存一條數(shù)據(jù)時,需要給這條數(shù)據(jù)提供一個對應的鍵。SharedPreferences 支持多種不同的數(shù)據(jù)類型存儲。
1. 將數(shù)據(jù)存儲到 SharedPreferences 中
要想使用 SharedPreferences,首先要獲得 SharedPreferences 對象。Android 中主要提供以下兩種方法用于得到 SharedPreferences 對象:
Context類中的getSharedPreferences()方法,此方法接收兩個參數(shù):第一個參數(shù)指定 SharedPreferences 文件的名稱,存放在 /data/data/<package name>/shared_prefs/ 目錄下;第二個參數(shù)指定操作模式,目前只有MODE_PRIVATE可選,表示只有當前應用程序才可以對這個 SharedPreferences 文件進行讀寫Activity類中的getPreferences()方法,它只接受一個操作模式參數(shù),因為使用這個方法會自動將當前 Activity 的類名作為 SharedPreferences 的文件名
得到 SharedPreferences 對象之后,就可以開始向 SharedPreferences 存儲數(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 對象提供了一系列 get 方法,用于讀取存儲的對應類型的數(shù)據(jù)。這些 get 方法都接收兩個參數(shù):第一個參數(shù)是鍵,第二個參數(shù)是默認值,表示傳入的鍵找不到對應的值時以什么樣的默認值來返回
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)
}
}
到此這篇關于Android 文件存儲與SharedPreferences存儲方式詳解用法的文章就介紹到這了,更多相關Android 存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Android Material Design自定義動畫的編寫
這篇文章主要介紹了詳解Android Material Design自定義動畫的編寫,其中對Activity的過渡動畫進行了重點講解,需要的朋友可以參考下2016-04-04
Android 實現(xiàn)帶頭部文字輸入框的自定義控件
這篇文章主要介紹了Android 實現(xiàn)帶頭部文字輸入框的自定義控件,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-04-04
詳解Android獲取系統(tǒng)內(nèi)核版本的方法與實現(xiàn)代碼
這篇文章主要介紹了詳解Android獲取系統(tǒng)內(nèi)核版本的方法與實現(xiàn)代碼的相關資料,這里提供了具體實現(xiàn)獲取內(nèi)核的方法,需要的朋友可以參考下2017-07-07
Android自定義view實現(xiàn)水波紋進度球效果
在我們的日常開發(fā)中自定義控件還是用的挺多的,設計師或者產(chǎn)品為了更好的漂亮,美觀,交互都會做一些牛逼的ui效果圖,但是最后實現(xiàn)的還是我們程序員啊。所以說 自定義view你還是得會的。2016-08-08
Android RecyclerView實現(xiàn)吸頂動態(tài)效果流程分析
RecyclerView是Android一個更強大的控件,其不僅可以實現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實現(xiàn)數(shù)據(jù)縱向滾動,也可以實現(xiàn)橫向滾動(ListView做不到橫向滾動)。接下來講解RecyclerView的用法2022-12-12
Android實現(xiàn)動態(tài)顯示或隱藏密碼輸入框的內(nèi)容
這篇文章主要介紹了Android實現(xiàn)動態(tài)顯示或隱藏密碼輸入框的內(nèi)容,主要通過設置EditText的setTransformationMethod()方法來實現(xiàn),需要的朋友可以參考下2014-09-09
解決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

