7.1 持久化技术的简介
数据持久化 : 将那些内存中的瞬时数据保存在设备中,保证即使手机或计算机关机的情况下,这些数据仍然不会丢失。
持久化技术 :可以让数据在瞬时状态和持久状态之间进行转换。
7.2 文件存储
它不对存储的内容进行任何格式化的处理。适合存储一些简单的文本数据或二进制数据。如果你想使用文件存储的方式保存一些较为复杂的结构化数据,就需要订一套自己的格式规范,方便之后将数据从文件中重新解析出来。
7.2.1 将数据存存储到文件中
Context类中的方法openFileOutput()方法,接受两个参数:
第一个参数:文件名(指定的文件名不可以包含路径,所有的文件默认存储在/data/data/<.package name>/files/目录下)
第二个参数:文件的操作模式:MODE_PRIVATE 和 MODE_APPEND
MODE_PRIVATE :当指定相同文件名的时候,所写入的内容将会覆盖原文件中的内容。
MODE_APPEND: 如果文件已经存在,就往文件中追加内容,不存在就创建新文件。
返回的对象是:FileOutputStream对象,得到这个对象之后,可以使用Java流的方式将数据写入文件中。
private 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()
}
}
use 函数 是Kotlin内置扩展函数,他会保证在lambda表达式中的代码全部执行完之后自动将外层的流关闭,就不需要我们去手动关闭流了。
7.2.2 从文件中读取数据
Context类中的方法 :openFileInput()方法
只接受一个参数:即需要读取的文件名。
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()
}
通过BufferedReader将文件中的数据一行行的读取出来,并拼接到StringBuilder对象中,最后将读取内容返回就可以了。
forEachLine函数 是kotlin的内置扩展函数,他会将读到的每行内容都会回调到lambda表达式中,在lambda表达式完成拼接逻辑。