AndroidStudio中利用openFileOutput將數據保存在文件中,利用openFileInput讀取文件中的數據

一、要實現的功能

將輸入框中的數據保存到指定文件名的文件中,實現數據的持久化;如果數據已經保存了,活動下次再啓動的時候,就將保存在文件中的數據讀取出來,顯示在輸入框中。

二、基本知識

  1. 利用活動生命週期中的一個回調函數onDestroy(),在活動被銷燬之前,將數據寫入到文件當中。例如按下返回鍵的時候,活動就被銷燬,這個方法裏面的代碼就會被執行。
  2. 利用TextUtils中的isEmpty(CharSequence str)方法可以輕鬆地判斷一個字符串變量是不是null,以及這個字符串是不是空字符串(字符串長度爲0)。java中傳統的方式是這麼寫的:
    if(string!=null&&string.length()!=0)
    ,這種方式比較麻煩,用TextUtils的話就比較方便了。
  3. ① 利用Contex類中的openFileOutput(String name, int mode)方法可以獲取一個FileOutputStream對象,這個方法第一個參數傳入的是文件名,第二個參數是文件的操作模式,取值主要有MODE_PRIVATE、 MODE_APPEND,如果文件已經存在了,第一種方式會把文件中原來的內容覆蓋掉,第二種方式則是在原來的基礎上進行追加數據。
    ②利用Contex類中的openFileInput(String name)可以獲取一個FileInputStream對象,方法中傳入的參數是文件的名稱。
    除此之外,文件的讀寫操作就沒有什麼特殊的了,用到的都是JDK中的IO知識,這裏還用到了緩衝字符流,主要是爲了提高讀取、寫入的速度。

三、代碼

  1. java代碼:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class MainActivity extends AppCompatActivity
{
    private EditText et;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et=findViewById(R.id.et);
        String load = load();
        if (!TextUtils.isEmpty(load))//如果文件存在
        {
            et.setText(load);
            et.setSelection(load.length());//將光標移動到輸入框的末尾
            Toast.makeText(this,"從文件中恢復數據成功!",Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onDestroy()//活動被銷燬之前,將數據保存到文件中
    {
        super.onDestroy();
        String string = et.getText().toString();
        save(string);
    }

    /**
     * 將文本數據寫入到文件中
     * @param inputText
     */
    private void save(String inputText)
    {
        FileOutputStream fileOutputStream=null;
        BufferedWriter bufferedWriter=null;
        try
        {
            fileOutputStream=openFileOutput("info.txt",MODE_PRIVATE);
            bufferedWriter=new BufferedWriter(new OutputStreamWriter(fileOutputStream));
            bufferedWriter.write(inputText);
        } catch (Exception e)
        {
            System.out.println(e);
        }
        finally
        {
            if (bufferedWriter!=null)
            {
                try
                {
                    bufferedWriter.close();
                } catch (IOException e)
                {
                    System.out.println(e);
                }
            }

        }
    }


    /**
     * 從文件中讀取數據
     * @return
     */
    private String load()
    {
        FileInputStream fileInputStream=null;
        BufferedReader bufferedReader=null;
        StringBuilder stringBuilder=new StringBuilder();
        try
        {
            fileInputStream= openFileInput("info.txt");
            bufferedReader=new BufferedReader(new InputStreamReader(fileInputStream));
            String line="";
            while ((line=bufferedReader.readLine())!=null)
            {
                stringBuilder.append(line);
            }
        } catch (Exception e)
        {
            System.out.println(e);
        }
        finally
        {
            if (bufferedReader!=null)
            {
                try
                {
                    bufferedReader.close();
                } catch (IOException e)
                {
                    System.out.println(e);
                }
            }
        }
        return stringBuilder.toString();
    }
}
  1. 佈局代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

   <EditText
       android:id="@+id/et"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:hint="請輸入您要保存的信息"/>

四、截圖

以下是兩張在模擬器中的效果截圖。

  1. 輸入要保存的文字信息:
    在這裏插入圖片描述
  2. 文件保存以後,下次再打開程序:
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章