Android入門(九)檔案儲存體與SharedPreferences儲存,
原文連結:http://www.orlion.ga/578/
Android系統中主要提供了三種方式用於簡單地實現資料持久化功能,即檔案儲存體、SharedPreference儲存以及資料庫儲存。當然,除了這三種方式之外,你還可以將資料儲存在手機的 SD卡中,不過使用檔案、SharedPreference或資料庫來儲存資料會相
對更簡單一些,而且比起將資料儲存在 SD卡中會更加的安全
一、檔案儲存體
1、將資料存放區到檔案中
Context類中提供了一個 openFileOutput ()方法,可以用於將資料存放區到指定的檔案中。這個方法接收兩個參數,第一個參數是檔案名稱,在檔案建立的時候使用的就是這個名稱,注意這裡指定的檔案名稱不可以包含路徑,因為所有的檔案都是預設儲存到/data/data/<packagename>/files/目錄下的。第二個參數是檔案的操作模式,主要有兩種模式可選,MODE_PRIVATE和MODE_APPEND。其中 MODE_PRIVATE是預設的操作模式,表示當指定同樣檔案名稱的時候,所寫入的內容將會覆蓋原檔案中的內容,而 MODE_APPEND則表示如果該檔案已存在就往檔案裡面追加內容,不存在就建立新檔案。其實檔案的操作模式本來還有另外兩種,MODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE,這兩種模式表示允許其他的應用程式對我們程式中的檔案進行讀寫操作, 不過由於這兩種模式過於危險,很容易引起應用的安全性漏洞,現已在 Android 4.2版本中被廢棄
openFileOutput ()方法返回的是一個 FileOutputStream對象,得到了這個對象之後就可以使用 Java流的方式將資料寫入到檔案中了。如下是程式碼範例:
public void save() { String data = "Data to save"; FileOutputStream out = null; BufferedWriter writer = null; try { out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(data); } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) { writer.close(); } } catch (IOException e) { e.printStackTrace(); } }}
2、從檔案中讀取資料
Context類還提供了一個openFileInput()方法用於從檔案中讀取資料。這個方法要比openFileOutput()簡單一些,它只接收一個參數,即要讀取的檔案名稱,然後系統會自動到/data/data/<package name>/files/目錄下去載入這個檔案,並返回一個FileInputStream對象。
程式碼範例:
public String load() { FileInputStream in = null; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try { in = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(in)); String line = ""; 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();}
二、SharedPreferences儲存
SharedPreferences是使用索引值對的方式來儲存資料的,SharedPreferences還支援多種不同的資料類型儲存,如果儲存的資料類型是整型,那麼讀取出來的資料也是整型的,儲存的資料是一個字串,讀取出來的資料仍然是字串。
1、將資料存放區到SharedPreferences中
要想使用SharedPreferences來儲存資料,首先要擷取到SharedPreferences對象。Android主要提供了三種方式擷取SharedPreferences對象
Context類中的getSharedPreferences()方法
此方法接收兩個參數,第一參數用於指定SharedPreferences檔案的名稱,如果不存在則建立一個,SharedPreferences檔案都是存放在/data/data/<packagename>/shared_prefs目錄下。第二個參數用於指定操作模式,主要有兩種模式,MODE_PRIVATE和MODE_MULTI_PROCESS。MODE_PRIVATE是預設的操作模式,和直接傳入)效果是相同的,表示只有當前的應用程式才可以對這個SharedPreferences檔案進行讀寫。MODE_MULTI_PROCESS則一般是用於會有多個進程中對同一個SharedPreferences檔案進行讀寫的情況。MODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE這兩種模式已在 Android 4.2版本中被廢棄
Activity類中的getPreferences()方法
這個方法和 Context中的 getSharedPreferences()方法很相似,不過它只接收一個操作模式參數,因為使用這個方法時會自動將當前活動的類名作為 SharedPreferences的檔案名稱。
PreferenceManager類中的getDefaultSharedPreferences()方法
這是一個靜態方法,它接收一個Context參數,並自動使用當前應用程式的包名作為首碼來命名SharedPreferences檔案
得到了SharedPreferences對象後,就可以開始向SharedPreferences檔案中儲存資料了,主要有三步:
調用SharedPreferences對象的edit()方法來擷取一個SharedPreferences.Editor對象
向SharedPreferences.Editor對象中添加資料,比如添加一個布爾類型的資料就使用putBoolean()方法,添加字串就使用putString()。
調用commint()方法將添加的資料提交,從而完成資料存放區操作。
2、從SharedPreferences中讀取資料
SharedPreferences對象中提供了一系列的get方法用於對儲存的資料進行讀取, 每種get方法都對應了SharedPreferences.
Editor中的一種 put方法,比如讀取一個布爾型資料就使用 getBoolean()方法,讀取一個字串就使用 getString()方法。這些 get方法都接收兩個參數,第一個參數是鍵,傳入儲存資料時使用的鍵就可以得到相應的值了,第二個參數是預設值,即表示當傳入的鍵找不到對應的值時,會以什麼樣的預設值進行返回。例:
SharedPreferences pref = getSharedPreferences("data" , MODE_PRIVATE);String name = pref.getString("name" , "");int age = pref.getInt("age" , 0);Boolean sex = pref.getBoolean("sex", true);Log.d("SharedPreferences", name);Log.d("SharedPreferences", "age=" + age);Log.d("SharedPreferences", "sex=" + sex);