安卓資料持久化:檔案儲存、SharedPreferences儲存以及資料庫儲存
阿新 • • 發佈:2019-01-28
1,檔案儲存
手機自帶的記憶體,只能供當前應用程式訪問,其他應用程式訪問不了,程式解除安裝這些資料也會隨著消失
原理:
基本是先獲取一個檔案的輸出流,然後把資訊write進去,最後關閉流
a,通過上下文類context的openFileOutput()方法獲得一個FileOutputStream輸出流
b,要寫入的內容通過write()寫到FileOutputStream物件
c,關閉流
openFileOutput()可以將資料儲存到指定的檔案中,方法有兩個引數,第一個引數是檔名,不需要帶上完整的路徑,因為這裡都是預設儲存到data/data/file下面的
第二個引數是檔案的操作模式,兩種:MODE_PRIVATE和MODE_APPEND.前者是覆蓋,後者是追加
(MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,前者是允許只讀,後者是隻寫,但是都被拋棄,因為不安全)
也是可以儲存資料的 --------------------- 來看看讀資料 讀資料也是主要是用到一個開啟輸入的函式openFileInput
setSelection()方法將輸入游標移動到文字的末尾位置以便再次輸入 TextUtils.isEmpty()方法可以一次性進行兩種空值的判斷,當傳入的字串為空或者是null的時候都會返回true 總的來說檔案儲存不適合用於儲存複雜的資料 ------------------------------------------------------------------------------------------------------------------------ 2,SharedPreferences儲存 首先來看儲存資料 SharedPreferences儲存是利用鍵值對的方式來儲存的,感覺有點類似map集合 要使用該方法來儲存資料就要先獲得一個SharedPreferences物件,有三種獲取方法 a,Context上下文類中的getSharedPreferences 兩個引數,第一個是指定檔案的名稱,不在就建立。目錄也是在data/data/包名/shared_prefs目錄下 第二個引數是操作模式。MODE_PRIVATE是預設的,只允許當前的應用程式對其進行操作,MODE_MULTI_PROCESS是一般用於有多個程序中對同一個SharedPreferences檔案進行讀寫的情況,同樣有MODE_WORLD_WRITEABLE MODE_WORLD_READABLE兩個被廢棄的模式 b,Activity類中的getPreferences 只有一個引數,也是操作模式,檔案的名稱是預設的當前活動的類名 c,PreferenceManager管理類中的getDefaultSharedPreferences() 管理類中的一個靜態方法,接收一個context引數,自動把當前的包名作為檔案命名的字首 得到一個物件之後,有三步來進行資料的儲存 1,呼叫物件的edit方法獲得一個SharedPreferences.Editor物件 2,向.Editor物件新增資料,putBoolean()或者是putString(),,等等putXXX()方法 3,呼叫commit方法將新增的資料提交,完成資料的儲存操作 看一個例項:
主要的就是上面的三句話 openFileOutput開啟一個輸出流,然後構建一個位元組緩衝流物件然後寫資料, 此外還有幾個方法需要特別注意一下 ,這幾個方法對於檔案關係提供了更好的支援,配合上面介紹的方式, 就可以對檔案的資料進行常規的CRUD操作 (增刪改查),方法如下: File getFIlesDir ():獲取檔案系統的絕對路徑。 boolean deleteFile(String name):刪除一個指定檔名為name的檔案。 String[] fileList() :當前應用內部儲存路徑下的所有檔名。 上一節中的儲存資料到手機記憶體也有一些方法private void save(String inputText ) { FileOutputStream fos = null; BufferedWriter writer = null; try { fos = openFileOutput( "data", Context.MODE_PRIVATE); writer = new BufferedWriter( new OutputStreamWriter(fos)); writer.write( inputText); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if( writer != null) writer.close(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
//幫助我們返回一個目錄 //context.getCacheDir ()的話就是儲存到cache快取資料夾下面 File file=new File(context.getFilesDir(), "userinfo.txt"); FileOutputStream fos= new FileOutputStream( file); //zhangsan 123 fos.write(( username+ "##"+ password).getBytes()); fos.close();
也是可以儲存資料的 --------------------- 來看看讀資料 讀資料也是主要是用到一個開啟輸入的函式openFileInput
主介面中private void read( ) { FileInputStream fis= null; BufferedReader reader = null; StringBuilder sb=new StringBuilder(); try { fis= openFileInput( "data"); reader= new BufferedReader( new InputStreamWriter(fis)); String line=""; while((line=reader.readerLine())!=null){ sb.append(line) } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if( reader!= null) reader.close(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
String inputText = load();
if (!TextUtils.isEmpty(inputText)) {
edit.setText(inputText);
edit.setSelection(inputText.length());
Toast.makeText(this, "Restoring succeeded",
Toast.LENGTH_SHORT).show();
}
setSelection()方法將輸入游標移動到文字的末尾位置以便再次輸入 TextUtils.isEmpty()方法可以一次性進行兩種空值的判斷,當傳入的字串為空或者是null的時候都會返回true 總的來說檔案儲存不適合用於儲存複雜的資料 ------------------------------------------------------------------------------------------------------------------------ 2,SharedPreferences儲存 首先來看儲存資料 SharedPreferences儲存是利用鍵值對的方式來儲存的,感覺有點類似map集合 要使用該方法來儲存資料就要先獲得一個SharedPreferences物件,有三種獲取方法 a,Context上下文類中的getSharedPreferences 兩個引數,第一個是指定檔案的名稱,不在就建立。目錄也是在data/data/包名/shared_prefs目錄下 第二個引數是操作模式。MODE_PRIVATE是預設的,只允許當前的應用程式對其進行操作,MODE_MULTI_PROCESS是一般用於有多個程序中對同一個SharedPreferences檔案進行讀寫的情況,同樣有MODE_WORLD_WRITEABLE MODE_WORLD_READABLE兩個被廢棄的模式 b,Activity類中的getPreferences 只有一個引數,也是操作模式,檔案的名稱是預設的當前活動的類名 c,PreferenceManager管理類中的getDefaultSharedPreferences() 管理類中的一個靜態方法,接收一個context引數,自動把當前的包名作為檔案命名的字首 得到一個物件之後,有三步來進行資料的儲存 1,呼叫物件的edit方法獲得一個SharedPreferences.Editor物件 2,向.Editor物件新增資料,putBoolean()或者是putString(),,等等putXXX()方法 3,呼叫commit方法將新增的資料提交,完成資料的儲存操作 看一個例項:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SharedPreferences.Editor editor=getSharedPreferences( "data", MODE_PRIVATE).edit();
editor.putString( "name", "hl174");
editor.putInt( "age", 18);
editor.putBoolean( "吃飯沒", false );
editor.commit();
}
});
最後看結果