android开发,使用kotlin学习数据存储(一)

184 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

1、文件存储

文件存储是Android中最基本的数据存储方式,它不对存储的内容进行任何格式化处理,有数据都是原封不动地保存在文件当中的,因此它比较适合存储一些简单的文本数据或者二进制数据。

(1)将数据存储在文件中

Context类中提供了一个openFileOutput()方法,用于将数据存储到指定的文件中。

第一个参数:文件名(系统会自动创建这个文件)。

第二个参数:文件的操作模式。

文件的操作模式有以下几种:

  • Context.MODE_PRIVATE:私有覆盖模式。只能被当前应用访问,并且如果写入,则覆盖。
  • Context.MODE_APPEND:私有追加模式。只能被当前应用访问,并且如果写入,则追加。
  • Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE已在Android4.2版本中被废除。

具体实现:

private fun save(inputText: String) {
            try {
                val output=openFileOutput("data", Context.MODE_PRIVATE)
                val writer=BufferedWriter(OutputStreamWriter(output))
                //这里使用了kotlin的内置函数use,它会保证在Lambda
                //表达式中的代码全部执行完之后自动将外层的流关闭,这
                //样就不再需要我们写一个finally语句,手动关闭流。
                writer.use {
                    it.write(inputText)
                }
                Toast.makeText(this,inputText,Toast.LENGTH_SHORT).show()
            }catch (e:IOException){
                e.printStackTrace()
            }
    }

如何证实数据是否已经保存成功了呢?

使用快捷键Ctrl+Shift+A(Mac系统是command+shift+A)打开搜索功能,在搜索框输入“Device File Explorer”即可找到这个工具,我们在这工具里找到/data/data/com.example.filepersistencetest/files/目录,里面有一个生成的data文件,双击打开,查看里面的内容。

(2) 从文件中读取数据

Context类提供的openFileinput()方法,用于从文件中读取数据。

参数:文件名。 具体实现:

private fun load():String{
        val content=StringBuilder()
        try {
            val input=openFileInput("data")
            val reader=BufferedReader(InputStreamReader(input))
            //kotlin提供的内置扩展函数forEachLine,它会将读到的内容都回调到Lambda表达式中。
            reader.use {
                reader.forEachLine {
                    content.append(it)
                }
            }

        }catch(e:IOException){
            e.printStackTrace()
        }
        return content.toString()
    }