开启掘金成长之旅!这是我参与「掘金日新计划 · 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()
}