Kotlin學習路(八):數據存儲(一)

<本文學習郭神《第三行代碼》總結>

數據存儲一共分爲五種方式:
1、文件存儲
2、SharedPreferences
3、SQLite數據庫存儲
4、ContentProvider
5、網絡存儲

1. 文件存儲

文件存儲不對存儲的內容進行任何格式化處理,所有數據都是原封不動的保存到文件當中,適合存儲一些簡單的文本數據或二進制數據。如果需要保存一些複雜的數據,就需要自己定義格式,比如保存json數據、加密數據等。
文件存儲默認存儲路徑爲:data/data//files/目錄下。
文件操作模式分爲兩種:
MODE_PRIVATE:默認方式,當指定相同文件名時,所寫入內容會覆蓋原文件中的內容。
MODE_APPEND:如果文件已經存在,則往文件裏追加內容,不存在就重新創建。

  • 1.1、存儲文件

Context類中提供了一個方法openFileOutput()方法,用於將數據存儲到指定的文件中。接收兩個參數:第一個是文件名,在文件創建時使用;第二個是文件操作模式。
openFileOutput()返回一個FileOutputStream對象,得到這個對象之後就可以使用Java流的方式將數據寫入文件中。

val input = ""
try {
    val output = openFileOutput("data", Context.MODE_PRIVATE)
    val write = BufferedWriter(OutputStreamWriter(output))
    write.use {
        it.write(input)
    }
} catch (e: Exception){
    e.printStackTrace()
}

注意:在try…catch…函數中,這裏沒有使用finally,也沒有關閉流,會不會出現一些問題,這裏不用擔心,在Kotlin提供了一個內置函數use,它會保證在Lambda表達式中的代碼全部執行完之後自動將外層流關閉。

- 1.2、讀取文件

和存儲文件類似,Context類中提供了一個方法openFileInput()方法,用於從指定文件讀取數據。接收一個參數:第一個是文件名,即讀取的文件名。
openFileInput()會返回FileInputStream對象,得到這個對象之後就可以使用流的方式將數據讀取出來。

val content = StringBuilder()
try {
    val input = openFileInput("data")
    val reader = BufferedReader(InputStreamReader(input))
    reader.use {
        reader.forEachLine {
            content.append(it)
        }
    }
} catch (e: Exception){
    e.printStackTrace()
}

注意:這裏讀取文件中數據時,使用了forEachLine函數,這也是Kotlin提供的內置函數,它會將讀到的每行內容都回調到Lambda表達式中。

2. SharedPreferences

SharedPreferences是使用鍵值對的方式存儲數據。當保存一條數據時,需要給這條數據提供一個對應的鍵。SharedPreferences支持多種不同數據類型存儲。

  • 2.1、SharedPreferences數據存儲

首先要獲取SharedPreferences對象,主要提供了兩種方法獲取SharedPreferences對象。
1、Context類中使用getSharedPreferences()方法
接收兩個參數:(1)指定SharedPreferences文件名稱,如果指定名稱不存在則會創建,SharedPreferences存放默認路徑data/data//shared_prefs/目錄;(2)指定操作模式,默認爲MODE_PRIVATE,表示當前應用纔可對這個SharedPreferences進行讀寫。
2、Activity類中使用getPreferences()方法
只接收一個參數:操作模式,因爲在Activity中使用,將會自動將該Activity類名作爲SharedPreferences的文件名。
3、存儲數據
首先得到SharedPreferences對象。
調用SharedPreferences對象的edit方法獲取SharedPreferences.Editor對象。
向SharedPreferences.Editor對象中添加數據。
調用apply方法將添加數據提交。

val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
editor.putBoolean("boolean", false)
editor.putInt("int", 0)
editor.putString("string", "string")
editor.apply()

val editor = getPreferences(Context.MODE_PRIVATE).edit()
editor.putBoolean("boolean", false)
editor.putInt("int", 0)
editor.putString("string", "string")
editor.apply()
  • 2.2、SharedPreferences數據讀取

SharedPreferences對象提供了很多get方法,用於讀取數據,每種get方法都對用了SharedPreferences.Editor中的一種put方法。get方法都接收兩個參數:(1)鍵,存儲數據時使用的鍵;(2)默認值,當找不到該鍵時,返回的默認值

val prefs = getSharedPreferences("data", Context.MODE_PRIVATE)
val bool = prefs.getBoolean("boolean", false)
val intTxt = prefs.getInt("int", 0)
val stringTxt = prefs.getString("string", "string")

val prefs = getPreferences(Context.MODE_PRIVATE)
val bool = prefs.getBoolean("boolean", false)
val intTxt = prefs.getInt("int", 0)
val stringTxt = prefs.getString("string", "string")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章