数据存储之文件存储

数据存储之文件存储

class MainActivity : AppCompatActivity() {

    private lateinit var mEditText: EditText

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mEditText = findViewById(R.id.editText)

        val inputText = load()
        if (inputText.isNotEmpty()){
            mEditText.setText(inputText)
            mEditText.setSelection(inputText.length)             //这里是将输入的光标移动到文本的末尾,以便继续输入
            Toast.makeText(this, "Restoring success", Toast.LENGTH_SHORT).show()
        }
    }

    private fun load(): String{
        val content = StringBuilder()
        try {
            val openFileInput = openFileInput("data")          //Context类提供
            val inputStreamReader = InputStreamReader(openFileInput)
            val bufferedReader = BufferedReader(inputStreamReader)
            bufferedReader.use {
                bufferedReader.forEachLine {            //一行行读取数据
                    content.append(it)                  //拼接到StringBuilder对象中
                }
            }
        }catch (e: IOException){
            e.printStackTrace()
        }
        return content.toString()
    }

    override fun onDestroy() {
        super.onDestroy()
        val inputText = mEditText.text.toString()
        save(inputText)
    }

    /**
     * openFileOutput  (构建)      写入数据到文件中          Context类提供
     * 构建FileOutputStream          文件字节输出流
     * 构建OutputStreamWriter        从字符流到字节流的桥接
     *                              1、字符的输出需要通过字符流来操作,但是本质最后还是通过字节流输出到计算机上进行存储的
                                    2、 因此OutputStreamWriter流的作用就是利用字节流作为底层输出流然后构建字符输出流,
                                    字符输出流输出字符到流中,然后通过指定的字符集把流中的字符编码成字节输出到字节流中,
                                    其作用就是一个桥梁,使得双方链接起来
     * 构建BufferedWriter,通过它将文本内容写入文件中
     * Context.MODE_PRIVATE  当指定相同文件名时,所写的内容会覆盖原文件中的内容
     * Context.MODE_APPEND   当文件已存在,就在文件内追加其内容,不存在就创建新的文件
     */
    private fun save(inputText: String) {
        try {
            val openFileOutput = openFileOutput("data", Context.MODE_PRIVATE)
            val bufferedWriter = BufferedWriter(OutputStreamWriter(openFileOutput))
            bufferedWriter.use {           //use函数,会保证在Lambda表达式中的代码全部执行完自动将外层的流关闭,这样就不需要编写finally语句,手动的关闭流了
                it.write(inputText)
            }
        }catch (e: IOException){
            e.printStackTrace()
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值