Android學習之檔案儲存體,android檔案儲存體

來源:互聯網
上載者:User

Android學習之檔案儲存體,android檔案儲存體

今天做了下檔案儲存體的小案例,並藉此鞏固一下Android中的單元測試及MVC的設計模式.

.AndroidMVC模式如下

<Button android:id="@+id/btnSave" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/etContent" android:layout_centerHorizontal="true" android:layout_marginTop="39dp" android:text="@string/btn_tip_save" /> <EditText android:id="@+id/etContent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="74dp" android:drawableLeft="@drawable/icon" android:ems="15" android:hint="@string/et_tip_writeContent" android:minLines="3" > <!-- ems長度 --> <requestFocus /> </EditText>

其中:android:ems="15" 代表設定TextView或EditText的寬度為15個字元的寬度

 

步驟2:業務層編輯:

代碼如下:

package com.example.savafile.service;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.content.Context;/**用於對頁面的操作,此處為資料的儲存與讀取*/public class FileService {    private Context context;    private String fileName;    /**初始化上下文和檔案名稱(路徑)*/    public FileService(Context context, String fileName) {        this.context = context;        this.fileName = fileName;    }    public boolean save(String content) {        boolean isSaveSuccessed = false;        BufferedWriter bw=null;        try {            //為Context建立輸出資料流(資料流向程式外)            //參數1為儲存的檔案名稱,  參數2 為MODE模式            FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);//構建位元組輸出資料流            OutputStreamWriter writer = new OutputStreamWriter(fos);//將位元組輸出資料流封裝為字元輸出資料流            bw = new BufferedWriter(writer);//將字元輸出資料流封裝為緩衝流?            bw.write(content);//write與OutputStream的區別            isSaveSuccessed = true;        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally{            try {                //write和fos為什麼不用關閉呢?                if (bw != null) {                    bw.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }        return isSaveSuccessed;    }    public String read(){        String line;        StringBuilder sb = new StringBuilder();//作用是什麼        BufferedReader br = null;                try {            FileInputStream fis = context.openFileInput(fileName);//通過Context中的openFileInput(路徑)的方法擷取輸入資料流            br = new BufferedReader(new InputStreamReader(fis));            while((line = br.readLine()) != null){                sb.append(line);//s +=line;作用一致,但會造成大量的記憶體浪費            }        } catch (IOException e) {//br.readLine()異常塊            e.printStackTrace();        }                return sb.toString();    }}

 

此處用到了JAVA中的I/O流,即輸入輸出資料流,小編搜尋相應資料如下:

package com.example.savafile.serviceTest;import com.example.savafile.service.FileService;import android.test.AndroidTestCase;/**單元測試*/public class ServiceTest extends AndroidTestCase { /**測試FileService中的save方法*/ public void testSave() { FileService testSave = new FileService(getContext(), "data");//儲存為xml檔案? testSave.save("hello test"); } /**測試FileService中的Read方法*/ public void testRead() { FileService testRead = new FileService(getContext(), "data");//儲存為xml檔案? testRead.read(); }}

單元測試的方法名最好以    test+需要測試的方法名    命名

③運行測試:

在開啟虛擬機器(或真機)的情況下,在單元測試類中右擊大綱的方法,運行為android項目即可

package com.example.savafile;import com.example.savafile.service.FileService;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;/**Android開發遵循的MVC原則 M業務層(FileService) V(xml布局) C控制層(Activity) * 測試業務層,必須要進行單元測試,確定業務層方法沒問題的情況下,編寫控制層*/public class MainActivity extends Activity implements OnClickListener { private Button btnSvae; private EditText etContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initialize(); readText(); } /**初始化控制項,並設定相應的監聽器*/ private void initialize() { btnSvae = (Button) findViewById(R.id.btnSave); etContent = (EditText) findViewById(R.id.etContent); btnSvae.setOnClickListener(this); } /**讀取之前儲存的資料*/ private void readText(){ String data = fileService.read(); if(data!=null){ etContent.setText(data); } } FileService fileService = new FileService(MainActivity.this, "data.txt"); /**監聽器方法*/ @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnSave: if(fileService.save(etContent.getText().toString())){//是否儲存成功 Toast.makeText(MainActivity.this, "恭喜您,儲存成功!", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this, "好可惜,儲存失敗!", Toast.LENGTH_SHORT).show(); } break; } }}

到此,就算編輯結束了.謝謝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.