数据持久化

  • Android 系统提供了三种方式用于简单的实现数据持久化的功能,
  • 文件存储、 SharedPreference 、数据库

  • 文件存储,context类提供了openFileOutput()、openFileInput()存储到指定的文件中,这个方法接收两个参数 ,第一个参数是文件名,在文件创建的时候,使用这个名称,注意这个名称不能包含路径,所有的文件都默认存储到/data/data/< packname>/file/目录下。

  • 第二个参数是文件存储的模式,主要有两种模式可以选择,

  • MODE_PRIVATE : 是默认的操作模式,表示当指定同样的文件名时,所写入的内容会覆盖掉原来的内容。

  • MODE_APPEND:则表示该文件已存在,就往里加内容,要是文件不存在,就创建文件。
  • openFileOut(),和 openFileInput()返回的是一个FileOutputStream 和 FileInputStream的对象。
  • 我们可以通过java流的方式来读取文件,或者写入文件。

  • demo 用于演示活动再次启动时,恢复数据的功能

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();//初始化控件
        recoverData();//恢复数据到EditText
        saveBtn.setOnClickListener(btnListener);

        getInfoFromFile();//从文件获取数据

    }

    private void recoverData() {
        String record = getInfoFromFile();

        if (!TextUtils.isEmpty(record)) {

            edit.setText(record);

        }

    }
    private View.OnClickListener btnListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            save2File();
        }
    };

    private void save2File() {

        String context = edit.getText().toString();
        BufferedWriter bufOut = null;
        try {
            FileOutputStream out = openFileOutput("data", MODE_PRIVATE);
            bufOut = new BufferedWriter(new OutputStreamWriter(out));

            bufOut.write(context);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufOut != null) {

                    bufOut.close();
                }

            } catch (IOException e) {

                e.printStackTrace();
            }
        }

    }

    public String getInfoFromFile() {

        StringBuilder context = new StringBuilder();
        BufferedReader reader = null;

        try {
            reader = new BufferedReader(new InputStreamReader(openFileInput("data")));

            String line;
            while ((line = reader.readLine()) != null) {

                context.append(line);
            }

        } catch (IOException e) {

            e.printStackTrace();
        } finally {

            if (reader != null) {

                try {
                    reader.close();
                } catch (IOException e) {

                    e.printStackTrace();
                }
            }
        }

        return context.toString();
    }

你可能感兴趣的:(数据持久化)