数据储存全方案,详解持久化技术

持久化技术的简介

数据的持久化就是指讲哪些内存中的瞬时数据保存打哦储存设备中,保证及时在手机或电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在储存设备周静的数据是处于持久化状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久化状态之间进行转换。

持久化技术被广泛应用于各种应用程序设计中,本文将着重记录Android系统中的三种持久化技术的实现方式,文件储存,SharedPreferences,Sqlite

文件储存

将数据储存到文件中

Context累中提供了一个 openFileOutPut() 方法,可以用于将数据存储到指定的文件中,这个方法接受两个参数,第一个参数是文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有文件都是默认存储到/data/data/<package name>/files/目录下。第二个参数是文件的操作模式,主要有两种模式可以进行选择,MODE_PRIVATEMODE_APPEND,其中前者是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件当中的内容,而后者则表示如果当前指定文件已经存在,则往文件中进行追加写入,不覆盖当前文件中已有的数据。
openFileOutPut() 方法返回的是一个FileOutputStream对象,得到了这个对象之后就可以使用Java流的方式将数据写入到文件中了。

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class MainActivity extends AppCompatActivity {
    private Button btn_save , btn_read ;
    private TextView tv_read ;
    private Toolbar toolbar ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initToolbar();
        initView();

    }

    private void initToolbar (){
        toolbar = findViewById(R.id.toolbar);
        toolbar.setNavigationIcon(getResources().getDrawable(R.mipmap.ic_launcher));
        setSupportActionBar(toolbar);
    }
    private void doMain (){
        save("测试文本");
    }

    private void initView (){
        btn_save = findViewById(R.id.btn_save);
        btn_read = findViewById(R.id.btn_read);
        tv_read = findViewById(R.id.tv_readText);
        btn_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                doMain();
            }
        });
    }

    private void save (String str){
        String data = str ;
        FileOutputStream out = null ;
        BufferedWriter writer = null;

        try {
            out = openFileOutput("data", Context.MODE_PRIVATE);
            writer = new BufferedWriter(new OutputStreamWriter(out));
            writer.write(data);
            Toast.makeText(getApplicationContext(),"文件写入成功",Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null){
                try {
                    writer.close();
                    Toast.makeText(getApplicationContext(),"输出流关闭成功",Toast.LENGTH_SHORT).show();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}

以上是一个写入案例

从文件中读取数据

类似于将数据存储到文件中,Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。这个方法要比openFileOutput() 简单一些,它只接受一个参数,即要读取的文件名,然后系统会自动到/data/data/<package name>/files/目录下去加载这个文件,并返回一个FileInputStream对象,得到这个对象之后再通过Java流的方式就可以将数据读取出来了。

private String read(){
        FileInputStream in = null ;
        BufferedReader reader = null;
        StringBuffer content = new StringBuffer();

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

但是,以上的方法并不适合用于保存一些较为复杂的文本数据。


本文版权归属:极束の梦想

转载文章时,请保留本文的版权内容。

作者:Seale

同时也欢迎各位大大交换友链。


本作品采用知识共享署名 4.0 国际许可协议进行许可。

如果可以的话,请给我钱请给我点赞赏,小小心意即可!

Last modification:April 12, 2019
If you think my article is useful to you, please feel free to appreciate