Android 數據存儲之 文件存儲


-------------------------------------------文件存儲-----------------------------------------------

文件存儲是 Android 中最基本的一種數據存儲方式,它不對存儲的內容進行任何的格式化處理,所有數據都是原封不動的保存到文件當中的。它比較適合用於存儲一些簡單的文本數據或二進制數據。如果你想使用文件存儲方式來保存一些較為復雜的文本數據,就需要定義一套自己的格式規范,方便於之后將文件重新解析出來。

----------------------------------------將數據存儲到文件-----------------------------------------

Context 類中提供了一個openFileOutput()方法,可以用於將數據存儲到指定的文件中

這個方法接收兩個參數,第一個參數是文件創建時使用的名稱,注意這里指定的文件名不可以包含路徑,因為所有文件都是默認儲存到 /data/data/<包名>/files/ 目錄下的。

第二個參數是文件的操作模式,主要有兩種模式可選,MODE_PRIVATE(覆蓋原文) 和 MODE_APPEND(追加內容)

openFileOutput() 方法返回的是一個 FileOutputStream 對象,得到這個對象之后就可以使用 Java 流的方式將數據寫入到文件中了。

將一段文本內容保存到文件中:

    public void save() {
        String data = "Data to save";
        FileOutputStream out = null;
        BufferedWriter writer = null;
        try {
            //設置文件名稱,以及存儲方式
            out = openFileOutput("data", Context.MODE_PRIVATE);
            //創建一個OutputStreamWriter對象,傳入BufferedWriter的構造器中
            writer = new BufferedWriter(new OutputStreamWriter(out));
            //向文件中寫入數據
            writer.write(data);
            
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

去復習一下Java的IO流,理解上面代碼將變得輕而易舉

運行程序,借助Android Studio 的 Android Device Monitor 查看該文件:

文件路徑:/data/data/<包名>/files/

導出 data 文件,查看內容:

----------------------------------------從文件中讀取數據-----------------------------------------

類似於將數據存儲到文件中,Context 類中還提供了一個 openFileInput() 方法,用於從文件中讀取數據

openFileInput() 方法只接收一個參數,即要讀取的文件名,然后系統會自動到 /data/data/<包名>/files/ 目錄下去加載這個文件,並返回一個 FileInputStream 對象

展示如何從文件中讀取文本數據:

    public String load() {
        FileInputStream in = null;
        BufferedReader reader = null;
        StringBuilder content = new StringBuilder();
        try {
            //設置將要打開的存儲文件名稱
            in = openFileInput("data");
            //FileInputStream -> InputStreamReader ->BufferedReader
            reader = new BufferedReader(new InputStreamReader(in));
            String line = new String();
            //讀取每一行數據,並追加到StringBuilder對象中,直到結束
            while ((line = reader.readLine()) != null) {
                content.append(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return content.toString();
    }

技巧:判斷字符串為空(字符串為空值,或者空字符串)的小工具 TextUtils.isEmpty( )方法它可以進行兩種空值的判斷,當傳入的字符串等於null或者等於空字符串的時候,這個方法就會返回 true,從而不用擔心使用未實例化的字符串而產生的空指針異常了。

文件存儲方面的核心技術就是 Context 類中提供的 openFileInput() 和 openFileOutput() 方法,之后就是利用Java的各種IO流來進行讀寫操作就可以了。

(Android中直接使用Java的IO流也是可以的,但是記住加上 WRITE_EXTERNAL_STORAGE 和 MOUNT_UNMOUNT_FILESYSTEMS 權限聲明)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM