1. 程式人生 > >Android開發(2):資料儲存之一:SharedPrefrences和檔案讀寫

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://yyk.familydoctor.com.cn/20631/

瀋陽性病醫院: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) {

//彈出警告視窗

}