Android 文件存儲與SharedPreferences存儲方式詳解用法
持久化技術(shù)簡介
數(shù)據(jù)持久化就是指將那些內(nèi)存中的瞬時數(shù)據(jù)保存到存儲設(shè)備中,保證即使在手機(jī)或計算機(jī)關(guān)機(jī)的情況下,這些數(shù)據(jù)也不會丟失。保存在內(nèi)存中的數(shù)據(jù)是處于瞬時狀態(tài)的,而保存在存儲設(shè)備的數(shù)據(jù)是處于持久狀態(tài)的。持久化技術(shù)提供了一種機(jī)制,可以讓數(shù)據(jù)在瞬時狀態(tài)和持久狀態(tài)之間進(jìn)行切換
文件存儲
1. 將數(shù)據(jù)存儲到文件中
文件存儲是 Android 中最基本的數(shù)據(jù)存儲方式,它不對存儲的內(nèi)容進(jìn)行格式化處理,所有數(shù)據(jù)都是原封不動的保存到文件當(dāng)中,適合存儲一些簡單的文本數(shù)據(jù)或二進(jìn)制數(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)建的時候使用。指定的文件名可以不包含路徑,因為所有的文件都默認(rèn)存儲到 /data/data/<package name>/files/ 目錄下
- 第二個參數(shù)是文件的操作模式,主要有
MODE_PRIVATE
和MODE_APPEND
兩種模式可選,默認(rèn)是MODE_PRIVATE
,表示當(dāng)指定相同文件名時,所寫入的內(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ù)的。也就是說,當(dāng)保存一條數(shù)據(jù)時,需要給這條數(shù)據(jù)提供一個對應(yīng)的鍵。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
可選,表示只有當(dāng)前應(yīng)用程序才可以對這個 SharedPreferences 文件進(jìn)行讀寫Activity
類中的getPreferences()
方法,它只接受一個操作模式參數(shù),因為使用這個方法會自動將當(dāng)前 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 方法,用于讀取存儲的對應(yīng)類型的數(shù)據(jù)。這些 get 方法都接收兩個參數(shù):第一個參數(shù)是鍵,第二個參數(shù)是默認(rèn)值,表示傳入的鍵找不到對應(yīng)的值時以什么樣的默認(rèn)值來返回
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 文件存儲與SharedPreferences存儲方式詳解用法的文章就介紹到這了,更多相關(guān)Android 存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
android圖片文件的路徑地址與Uri的相互轉(zhuǎn)換方法
下面小編就為大家?guī)硪黄猘ndroid圖片文件的路徑地址與Uri的相互轉(zhuǎn)換方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04Android開發(fā)筆記之Intent初級學(xué)習(xí)教程
這篇文章主要介紹了Android開發(fā)筆記之Intent初級學(xué)習(xí),較為詳細(xì)的分析了Android Intent項目的建立,功能實現(xiàn)及Intent使用技巧,需要的朋友可以參考下2016-02-02Android Studio生成函數(shù)注釋的實現(xiàn)方法
這篇文章主要介紹了Android Studio生成函數(shù)注釋的實現(xiàn)方法的相關(guān)資料,希望通過本文大家能夠?qū)崿F(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09如何利用Flutter實現(xiàn)酷狗流暢Tabbar效果
這篇文章主要給大家介紹了關(guān)于如何利用Flutter實現(xiàn)酷狗流暢Tabbar效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-02-02Android自定義控件實現(xiàn)UC瀏覽器語音搜索效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實現(xiàn)UC瀏覽器語音搜索效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Android 中ScrollView與ListView沖突問題的解決辦法
這篇文章主要介紹了Android 中ScrollView與ListView沖突問題的解決辦法的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握解決問題的辦法,需要的朋友可以參考下2017-10-10Android 通過cmake的方式接入opencv的方法步驟
這篇文章主要介紹了Android 通過cmake的方式接入opencv的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04RecyclerView實現(xiàn)抖音縱向滾動ViewPager效果
這篇文章主要為大家詳細(xì)介紹了RecyclerView實現(xiàn)抖音縱向滾動ViewPager效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07