Android開發(2):資料儲存之一:SharedPrefrences和檔案讀寫
一、資料儲存
本文主要講前兩種儲存方式,其中檔案讀寫只記錄Internal Storage方式
1. SharedPrefrences方式
輕量級NVP方式儲存,以XML的檔案方式儲存,適合少量資料的儲存。
NVP:Name/Value pair, 名稱/值 對。
2. 檔案讀寫
採用Java.io.*庫提供的I/O介面讀寫檔案
3. SQLite資料庫
輕量級嵌入式內建資料庫
4. ContentProvider
封裝各種資料來源(檔案、資料庫、網路),共享給多個應用
二、sharedPreferences使用
1. 定義訪問模式
public static int MODE = MODE_PRIVATE;
1
MODE_PRIVATE為私有模式,僅建立程式可讀寫。
另外還有全域性讀(MODE_WORLD_READABLE)和全域性寫(MODE_WORLD_WRITEABLE)模式,但現在的版本是沒辦法使用的了,因為不安全。
2. 定義SharedPreferences的名稱
public final static String PREFERENCE_NAME = “MyPassword”;
1
使用該名稱,建立的xml檔案也與這個同名,同時,相同名稱的NVP內容,都會被儲存在同一檔案中。
3. 建立SharedPreferences物件
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME, MODE);
1
將訪問模式和名稱作為引數,傳遞給getSharedPreferences函式,並獲得例項物件。
4. 新增資料
SharedPreferences.Editor editor = sharedPreferences.edit();
1
通過SharedPreferences.Editor類來進行資料的新增。
editor.putString(“password”, “123456”);
editor.putInt(“number”, 10);
通過鍵值對進行儲存。且支援多種資料型別,通過AS的補全就可以知道。
editor.commit();
瀋陽治療溼疣正規醫院:
瀋陽性病醫院:http://yiyuan.120ask.com/syxb/
1
注意新增完資料之後需要加上上面這一句,將資料儲存到xml檔案中去。如果不新增,讀取資料的時候檔案還會是空白的。
5. 讀取資料
String name = sharedPreferences.getString(“password”,“null”);
int age = sharedPreferences.getInt(“Age”, 0);
通過get()函式獲取NVP,第一個引數為NVP的Name,第二個引數是找不到該數值的時候使用的預設值。
如果先新增資料再讀取資料,則
password == “123456”
age == 10
若未新增資料的時候就讀取資料,則
password == “null”
age == 0
正確設定預設值並通過判斷預設值可以做很多事情,比如應用第一次啟動時。
三、檔案讀寫儲存
1. openFileOutput()
用於將應用的資料寫入指定檔案,如果檔案不存在,則建立一個新檔案。
語法格式
public FileOutputStream openFileOutput(String name, int mode)
1
返回FileOutputStream型別
name為檔名稱,不能包含描述路徑的斜杆。
模式
MODE_PRIVATE 覆蓋已有檔案
MODE_APPEND 在已有檔案後追加資料
MODE_WORLD_READABLE 全域性讀,不安全,同上,已禁用
MODE_WORLD_WRITEABLE 全域性寫,同上
使用
String filename = “MyData.txt”;
try (FileOutputStream output = openFileOutput(filename, MODE_PRIVATE)) {
String str = editText.getText().toString();
output.write(str.getBytes());
output.flush();
output.close();
}
catch (IOException ex) {
//彈出警告視窗
}
為什麼要用異常處理:因為檔案讀取容易出現異常,比如呼叫讀入函式openFileInput時,檔案不存在,如果不使用異常處理,程式很容易奔潰。
flush():為提高檔案系統性能,一般呼叫write()函式時,如果寫入資料量較少,系統會先將資料儲存在緩衝區中,等資料積累到一定程度再一次下=性寫入檔案,因此close()之前一定要呼叫flush()函式,將緩衝區的剩餘資料都寫進檔案中。
2. openFileInput()
用於開啟一個與應用程式聯絡的私有檔案輸入流。
語法格式
public FileInputStream openFileInput (String name)
1
使用
try (FileInputStream input = openFileInput(filename)) {
byte[] contents = new byte[input.available()];
int len = input.read(contents);
StringBuilder sb = new StringBuilder("");
sb.append(new String(contents, 0, len));
input.close();
editText.setText(sb.toString());
}
catch (IOException ex) {
//彈出警告視窗
}