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")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章