編輯:關於Android編程
在android系統中主要提供了三種方式用於簡單的實現數據持久化功能,即文件存儲,SharePreference存儲以及數據庫存儲。當然還可以把數據保存到SD卡中。
文件存儲是android中最基本的一種數據存儲方式,它不對存儲的內容進行任何的格式話處理,所有數據都是原封不動地保存到文件當中的,因而比較適合用於存儲一些簡單的文本數據或二進制數據。
Context類中提供了一個openFileOutput()方法,可以用於將數據存儲到指定的文件中。這個方法接收兩個參數,第一個參數是文件的名,在創建文件的時候使用的就是這個名稱,注意這裡指定的文件名不包含路徑,因為所有的文件都是默認存儲到/data/data/
openFileOutput()方法返回的是一個FileOutputStream對象,得到這個對象之後就可以使用java流的方式將數據寫入到文件中了。
把數據保存到文件中
創建一個android項目,項目名為FilePersistenceTest,並修改activity_main.xml中的代碼,代碼如下所示:
下面我們要做的是,在活動銷毀的時候,保存數據,把數據保存到文件當中。修改MainActivity中的代碼:
package com.jack.filepersistencetest; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.view.Menu; import android.widget.EditText; public class MainActivity extends Activity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.edit); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void save(String inputText){ FileOutputStream fileOutputStream=null;//文件輸出流對象 BufferedWriter bufferedWriter=null;//字符緩沖流對象 try { //初始化文件輸出流對象 fileOutputStream=openFileOutput("datafile", Context.MODE_PRIVATE); //初始化字符緩沖流對象 bufferedWriter=new BufferedWriter(new OutputStreamWriter(fileOutputStream)); //向緩沖內存中寫入字符串 bufferedWriter.write(inputText); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try{ if(bufferedWriter!=null){ bufferedWriter.close();//關閉文件 } }catch(Exception e){ e.printStackTrace(); } } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); String inputText=editText.getText().toString();//獲取到文本框裡面的內容 save(inputText);//保存文本框中的信息 } }
在活動銷毀的時候調用onDestroy方法的時候調用save方法保存文本框裡面的內容。運行程序,在文本框中輸入hello world,如下圖:
然後按下back鍵關閉程序,這時我們輸入的內容就已經保存到文件中了。我們可以打開ddms的file explorer來查看。在file explZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcmVy1tC9+Mjrtb0vZGF0YS9kYXRhL2NvbS5qYWNrLmZpbGVwZXJzaXN0ZW5jZXRlc3QvZmlsZXMvxL/CvM/Cw+ajrL/J0tS/tLW9yfqzycHLZGF0YWZpbGXOxLz+o6zI58/CzbyjujwvcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20141110/2014111008354910.jpg" alt="\">
然後點擊上圖中右邊最左邊的按鈕將文件導出到電腦上,然後用文本編輯器打開文件,可以看到裡面的內容如下:
可以證實文本框裡面的內容確實已經保存到文件中了。
從文件中讀取數據
類似將數據存儲到文件中Context類中還提供了一個openFileInput方法,用於從文件中讀取數據。這個方法比較簡單,只接收一個參數,即要讀取的文件名,然後系統會自動到/data/data/
修改MainActivity中的代碼,修改如下所示:
package com.jack.filepersistencetest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.text.TextUtils; import android.view.Menu; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.edit); String inputText=load(); if(!TextUtils.isEmpty(inputText)){ editText.setText(inputText); editText.setSelection(inputText.length()); Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void save(String inputText){ FileOutputStream fileOutputStream=null;//文件輸出流對象 BufferedWriter bufferedWriter=null;//字符緩沖流對象 try { //初始化文件輸出流對象 fileOutputStream=openFileOutput("datafile", Context.MODE_PRIVATE); //初始化字符緩沖流對象 bufferedWriter=new BufferedWriter(new OutputStreamWriter(fileOutputStream)); //向緩沖內存中寫入字符串 bufferedWriter.write(inputText); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try{ if(bufferedWriter!=null){ bufferedWriter.close();//關閉文件 } }catch(Exception e){ e.printStackTrace(); } } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); String inputText=editText.getText().toString();//獲取到文本框裡面的內容 save(inputText);//保存文本框中的信息 } public String load(){ FileInputStream in=null;//文件輸入流 BufferedReader reader=null;//字符緩沖流 StringBuffer content=new StringBuffer();//StringBuffer對象 try { in=openFileInput("datafile");//獲得文件輸入流 reader=new BufferedReader(new InputStreamReader(in));//獲得緩沖對象 String line="";// while((line=reader.readLine())!=null){//讀取一行內容 content.append(line);//把讀取的內容添加到content } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(reader!=null){ try { reader.close();//關閉讀取流 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return content.toString();//返回字符串 } }
TextUtils.isEmpty()方法可以一次性進行2種值的判斷,當傳入的字符串等於null或等於空字符串的時候,這個方法都會返回true,從而使我們不需要單獨去判斷這兩種空值。
重新運行程序,效果如下:
文件存儲不適合用來保存一些比較復雜的數據,更復雜的數據的保存方法,我將在後面就行總結。
轉載請注明來至:http://blog.csdn.net/j903829182/article/details/40924441
ctrl+shift+N 查找文件,以懸浮窗口的形式搜索 contrl+N 查找類,與ctrl+shift+N相似,但是只能查找類 ctrl + E 最近打開的文件,可
手機怎麼掃描二維碼?手機掃描二維碼方法介紹一、通過微信掃描二維碼打開微信,點擊微信右上角的+號,從彈出的菜單中選擇“掃一掃”;在彈出
總結下近一年的學習經歷,以中國的新年為節點。時間從2015年年後到今天,2015年年末。首先我必須要感謝前輩的書籍和高質量的博客。1、重新學習了一遍《Linux內核源代碼
喜歡K歌的小伙伴注意啦啦!萬眾期待的酷狗ktv手機版終於上線啦!現在,只要下載了酷狗ktv的手機版,不用去K房,在家也一樣可以開啟唱K模式!那麼,作為酷狗旗