第一行代码 第三版 第七章 数据储存持久化技术 7.1~7.2文件存储

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表达式完成拼接逻辑。

发布了28 篇原创文章 · 获赞 11 · 访问量 2404

猜你喜欢

转载自blog.csdn.net/Y_an_Y/article/details/105715296