学习Android之文件存储

文件存储

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

将数据存储到文件中

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

 它接收两个参数:

  第一个是文件名,不可以包括路径,因为所有文件默认存储到/data/data/<package name>/files/目录下;

  第二个是文件的操作模式,主要有MODE_PRIVATE和MODE_APPEND,默认是前者,表示覆盖原文件,后者表示追加内容。

  虽然还有另外两种模式可以对文件进行读写操作,不过由于安全原因被废弃。

 

 openFileOutput()方法返回的是一个FileOutputStream对象,得到这个对象之后就可以使用Java流的方式将数据写入文件中了。

复制代码
    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()
        }
    }
复制代码

 

 借助FileOutputStream对象构建出一个OutputStreamWriter对象,接着再使用OutputStreamWriter构建出一个BufferedWriter对象,这样你就可以通过BufferedWriter将文本内容写入文件中了。

 use函数是Kotlin提供的内置扩展函数,可以保证Lambda表达式中的代码全部执行完之后自动将外层的流关闭,这样就不需要我们再编写一个finally语句,手动去关闭流了,是一个非常好用的扩展函数。

 

 从文件中读取数据

 Context类中提供了一个openFileInput()方法,用于从文件中读取数据。

 它只接收一个参数:文件名。此方法返回一个FileInputStream对象,通过流的方式读取数据。

复制代码
    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()
    }
复制代码

 

 首先通过openFileInput()方法获取了一个FileInputStream对象,然后借助它又构建出了一个InputStreamReader对象,接着再使用InputStreamReader构建出一个BufferedReader对象,这样我们就可以通过BufferedReader将文件中的数据一行行读取出来,并拼接到StringBuilder对象当中,最后将读取的内容返回就可以了。

 forEachLine函数也是Kotlin提供的一个内置扩展函数。

 

posted @   PeacefulGemini  阅读(204)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
回顶部
点击右上角即可分享
微信分享提示