個人解讀Activity之四-Part2-File – Android移動開發技術文章_手機開發 Android移動開發教學課程

 今天,我們來記錄數據存儲的part2,討論以下關於File和SQLite的話題。我們知道,再關系型數據庫出現之前大傢都習慣用文件來保存數據,後來出現瞭數據庫,能夠更加有效的組織數據,我們首先來討論用文件存取數據。

      對於文件,我們很容易想到對它的常用操作:創建、讀取和寫入等!Android也提供瞭這些方法,接下來看一下如何使用,很顯然,我們首先要獲得當前Activity的輸入流才能輸入數據,同理,我們也必須先獲得輸出流才能輸出數據,然而怎樣獲取當前Activity上下文的輸入輸出流呢,這就用到瞭Context中的如下兩個方法:

 

下面我們來看一下兩個函數的定義,這樣就知道瞭參數的含義,以及返回值等等信息:

 

讀取和寫入有一個相同的參數,那就是輸入/輸出數據流的文件名,輸出數據的方法還有第二個參數,也就是輸出的模式:有MODE_PRIVATE,這是默認模式,也可以是追加模式,如果文件中已經存在內容,當再輸出內容到這個文件之中的時候,新輸出的數據並不會覆蓋之前存在的數據,而是追加在已經存在的數據的後面,還有兩種模式是用來控制權限的

接下來,我們就寫一個簡單的程序來使用一下這兩個函數,往一個文件裡面寫入一些字符串,然後在讀取,我們寫入一個不存在的文件,這樣FileOutputStream就會創建這樣一個文件。如果你是寫入一個人已經存在的文件,而且寫入模式是追加模式,這樣有可能因為文件中原本就存在數據造成瞭讀取的數據和剛寫入的數據不同。

       第一步:創建一個新的工程File www.aiwalls.com

       第二步:修改佈局文件,添加兩個按鈕,分別用於觸發寫入和讀取操作,再放置一個EditText用於編輯內容,放置一個TextView用於顯示讀取出來的內容

       第三步:修改java源文件,主要是為兩個按鈕添加事件監聽器,分別為讀寫操作,代碼如下:

public class FileActivity extends Activity { 
    private static final String NAME = "filetest.txt"; 
    private Button write, read; 
    private EditText edit01; 
    private TextView view01; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        edit01 = (EditText)findViewById(R.id.EditText01); 
        write = (Button)findViewById(R.id.write); 
        view01 = (TextView)findViewById(R.id.TextView01); 
        read = (Button)findViewById(R.id.read); 
         
        write.setOnClickListener(new View.OnClickListener() { 
             
            @Override 
            public void onClick(View v) { 
                // TODO Auto-generated method stub  
                try{ 
                    FileOutputStream out = openFileOutput(NAME, MODE_APPEND); 
                    out.write(edit01.getText().toString().getBytes()); 
                }catch (Exception e) { 
                    e.printStackTrace(); 
                } 
            } 
        }); 
         
        read.setOnClickListener(new View.OnClickListener() { 
             
            @Override 
            public void onClick(View v) { 
                // TODO Auto-generated method stub  
                try{ 
                    FileInputStream in = openFileInput(NAME); 
                    byte[] buffer = new byte[in.available()]; 
                    in.read(buffer); 
                    view01.setText(new String(buffer)); 
                }catch (Exception e) { 
                    e.printStackTrace(); 
                } 
            } 
        }); 
    } 

public class FileActivity extends Activity {
 private static final String NAME = "filetest.txt";
 private Button write, read;
 private EditText edit01;
 private TextView view01;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        edit01 = (EditText)findViewById(R.id.EditText01);
        write = (Button)findViewById(R.id.write);
        view01 = (TextView)findViewById(R.id.TextView01);
        read = (Button)findViewById(R.id.read);
       
        write.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    try{
     FileOutputStream out = openFileOutput(NAME, MODE_APPEND);
     out.write(edit01.getText().toString().getBytes());
    }catch (Exception e) {
     e.printStackTrace();
    }
   }
  });
       
        read.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    try{
     FileInputStream in = openFileInput(NAME);
     byte[] buffer = new byte[in.available()];
     in.read(buffer);
     view01.setText(new String(buffer));
    }catch (Exception e) {
     e.printStackTrace();
    }
   }
  });
    }
}

 

       第四步:運行程序,可看到如下效果:

 

摘自 chenlong12580的專欄

發佈留言