持久化技术——文件存储

该方法不对存储内容进行任何格式化处理,比较适合用于一些简单的文本数据或二进制数据。

将数据存储到文件中

Context类中提供了一个openFileOutput()方法,用于将数据存储到指定的文件中。
该方法接收两个参数:

  • 文件名。这里指定的文件名不能包含路径,所有文件默认存储在/data/data//files/目录下。
  • 文件的操作模式。MODE_PRIVATE:当指定同样的文件名时,所写的内容会覆盖原文件的内容;MODE_APPEND:如果该文件已存在,就往文件里追加内容。

在Androidzhong项目中使用文件存储技术

  1. 创建一个FilePersistence项目。
  2. 修改activity_main.xml中代码:添加一个EditText用于输入内容。
<EditText
        android:id="@+id/edit_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Type something here"/>

  1. 修改MainActivity,让用户刚输入的数据被回收之前存储在文件中。
    瞬时数据会在活动被销毁时被回收,所以要在onDestry()中将瞬时数据存储在文件中。
public class MainActivity extends AppCompatActivity {

    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText)findViewById(R.id.edit_button);
    }

    public void save(String inputText){
        FileOutputStream fileOutputStream = null;
        BufferedWriter bufferedWriter = null;

        try{
            fileOutputStream = openFileOutput("data",MODE_PRIVATE);
            bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
            bufferedWriter.write(inputText);
        }catch(IOException e){
            e.printStackTrace();
        }finally {
            try{
                if(bufferedWriter != null) bufferedWriter.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        String text = editText.getText().toString();
        save(text);
    }
}

从文件中读取数据

Context类中的openFileInput()方法:用于从文件中读取数据,只接收一个参数(要读取的文件名),系统会自动到/data/data//files/目录下去加载这个文件,并返回一个FileInputStream对象。

TextUitls.isEmpty()方法:对字符串进行非空判断,当传入的字符等于null或空字符串时,这个方法会返回true.
修改MainActivity中的代码

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText)findViewById(R.id.edit_button);

        String input = load();
        if(!TextUtils.isEmpty(input)){//对字符串进行非空判断
            editText.setText(input);//将内容填充到EditText
            editText.setSelection(input.length());//将光标移动到内容末尾
            Toast.makeText(this,"Restoring succeed",Toast.LENGTH_LONG).show();
        }
    }


  public String load(){
        FileInputStream fileInputStream = null;
        BufferedReader bufferedReader = null;
        StringBuilder content = new StringBuilder();

        try{
            fileInputStream = openFileInput("data");
            bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
            String line = "";
            while((line = bufferedReader.readLine()) != null){
                content.append(line);
            }
        }catch(IOException e){
            e.printStackTrace();
        }finally {
            try{
                if(bufferedReader != null) bufferedReader.close();
            }catch (IOException e){
                e.printStackTrace();
            }

        }
        return content.toString();
    }

首先通过openFileInput()方法获得FileInputStream对象,然后借助它构建一个InputStreamReader对象,接着使用InputStramReader构建一个BufferedReder对象,通过BufferdeReader金星秀一行行读取,把文件内容读出来。

猜你喜欢

转载自blog.csdn.net/weixin_42937036/article/details/90787402