-------------------------------------------文件存儲-----------------------------------------------
文件存儲是 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 權限聲明)