(六) 數據存儲 Part 1 文件存儲方式

第六章 數據存儲java

6.1 持久化技術android

持久化技術指將內存中的瞬時數據保存到存儲設備中,保證即便在手機或電腦關機的狀況下,這些數據仍然不會丟失。數據庫

主要有三種方式用於簡單地實現數據持久化功能:文件存儲、SharedPreferences存儲以及數據庫存儲。app

6.2 文件存儲ide

android中最基礎的一種數據存儲方式,不對存儲內容作任何格式化處理,比較適合存儲一些簡單的文本數據或二進制數據。ui

6.2.1 將數據存儲到文件中this

建立一個新項目FilePersistenceTestspa

a.修改activity_main中的代碼,加入一個EditTextcode

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Type Something Here"/>
</LinearLayout>

b.修改MainActivity.java中的代碼xml

openFileOutput()方法能夠用於將數據存儲到指定文件中,接收兩個參數,第一個爲文件名,不包含路徑,第二個爲文件的操做模式,MODE_PRIVATE和MODE_APPEND。該方法返回一個FIleOutputStream對象。再借助它構建出一個OutputStreamWriter對象,接着再用OutputStreamWriter構建出一個BufferedWriter對象,而後經過BufferedWriter來將文本內容寫入文件。

 out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(input);

在onDestroy()方法中加入save方法,保證在數據被回收以前,將它存儲到文件當中。

 private EditText edit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = (EditText) findViewById(R.id.edit);
}
    @Override
    protected void onDestroy() {
        super.onDestroy();
        String inputText = edit.getText().toString(); save(inputText);
    }

    public void save(String input){
        FileOutputStream out = null;
        BufferedWriter writer = null;
        try{
            out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(input);
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            try {
                if (writer != null) {
                    writer.close();
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }

運行程序:

輸入以後,經過Tools——>Android———>Android Device Monitor

在File Explorer標籤頁中找到/data/data/com.example.song.filepersistencetest/file/目錄,將data文件導出

用記事本打開該文件便可看到內容。

6.2.2 從文件中讀取數據

修改MainActivity中的方法

經過openFileInput()方法得到一個FileInputStream對象,而後藉助它構建出一個InputSteamReadder對象,接着再使用InputStreamReader構建出一個BufferedReader對象,經過BufferedReader進行一行行地讀取,把文件中的全部內容讀取出來,並存放在StringBuilder對象中,最後返回讀取的對象。

注意的方法:

1.reader.readLine() 讀取文件中的一行字符串

2.TextUtils.isEmpty()方法能夠一次性對兩種空值進行判斷,當傳入的字符串等於null或者等於空字符串時,這個方法都會返回true

3..setSelection()方法將輸入光標移動到文本的末尾位置以便繼續輸入。

public class MainActivity extends AppCompatActivity {
    private EditText edit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = (EditText) findViewById(R.id.edit);

        String inputText = load(); if(!TextUtils.isEmpty(inputText)){ edit.setText(inputText); edit.setSelection(inputText.length()); Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show(); }
    }
  public String load() {
        StringBuilder builder = new StringBuilder();
        FileInputStream in = null; BufferedReader reader = null; try {
            in = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(in));
            String line = "";
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return builder.toString();
    }
}

運行程序:

 

總結:

存儲文件和讀取文件的核心:

存儲數據到文件文件:

openFileOutput()方法建立FileOutputStream對象,再借助它構建出一個OutputStreamWriter對象,接着再用OutputStreamWriter構建出一個BufferedWriter對象,而後經過BufferedWriter來將文本內容寫入文件。

 out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(input);

從文件中讀取數據:

經過openFileInput()方法得到一個FileInputStream對象,而後藉助它構建出一個InputSteamReadder對象,接着再使用InputStreamReader構建出一個BufferedReader對象,經過BufferedReader進行一行行地讀取,把文件中的全部內容讀取出來,並存放在StringBuilder對象中,最後返回讀取的對象。

in = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(in));
相關文章
相關標籤/搜索