12. 数据存储之文件和SharedPreferences
12.1 文件存储
将数据存储到文件中
private fun save(text: String) {
try {
val output = openFileOutput("data", Context.MODE_PRIVATE)
val writer = BufferedWriter(OutputStreamWriter(output))
writer.use {
it.write(text)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
可以使用Device File Explorer工具查看保存的文件。
存储地址:/data/data/<packagename>/files/目录。文件名是代码中设置的 data。
从文件中读取数据
private 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()
}
12.2 SharedPreferences存储
SharedPreferences存储
val editor = getSharedPreferences("user", Context.MODE_PRIVATE).edit()
editor.putString("name", "Tom")
editor.putInt("age", 28)
editor.putBoolean("married", false)
editor.apply()
实现SharedPreferences存储的步骤如下:
- 根据Context获取SharedPreferences对象
- 利用
edit()方法获取Editor对象。 - 通过Editor对象存储
key-value键值对数据。 - 通过
commit()方法提交数据。
SharedPreferences读取
val prefs = getSharedPreferences(name, Context.MODE_PRIVATE)
val name = prefs.getString("name", "")
val age = prefs.getInt("age", 0)
val married = prefs.getBoolean("married", false)
存储地址:/data/data/<packagename>/shared_prefs/目录中。以代码中 name 名字的xml文件中。
12.3 简化SharedPreferences的用法
在implementation 'androidx.core:core-ktx:1.8.0'库中,有一个SharedPreferences的扩展edit。
getSharedPreferences("data", Context.MODE_PRIVATE).edit {
putString("name", "Tom")
putInt("age", 110)
}
只需要关注存放的数据就行。
内部原理,类似下面这个open扩展函数:
fun SharedPreferences.open(block: SharedPreferences.Editor.() -> Unit) {
val editor = edit()
editor.block()
editor.apply()
}