第一行代碼 第三版 第七章 數據儲存持久化技術 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表達式完成拼接邏輯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章