Android 系统中主要提供了 3 种方式用于简单地实现数据持久化功能,

1-文件存储,2-SharedPreference存储,3-数据库存储

文件存储

用于存储一些简单的 文本数据 或 二进制数据

FilePersistenceTest 项目

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    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 somethind here" />
</LinearLayout>

MainActivity.java

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);
    }

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

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

  首先在 onCreate() 方法中获取了 EditText 的实例,然后重写了 onDestroy() 方法,这样就可以保证在活动销毁之前一定会调用这个方法。在 onDestory() 方法中我们获取了 EditText 中输入的内容,并调用 save() 方法把输入的内容存储到文件中,文件命名为 data。

  openFileOutput() 方法返回的是一个 FileOutputStream 对象,得到了这个对象之后就可以使用 Java 流的方式将数据写入到文件中了。再借助 FileOutputStream 对象构建出一个 OutputStreamWriter 对象,接着再使用 OutputStreamWriter 构建出一个 BufferedWriter 对象,这样就可以通过 BufferedWriter 来将文本内容写入到文件中了。

运行程序,输入字符串,返回

打开 AS右下角的 File Explorer 或者 Android Device Monitor 工具中的 File Explorer标签页,找到:/data/data/com.example.filepersistencetest/files 目录,可以看到生成了一个 data 文件

android Shared Preferences最多保存大小 android 文件存储_android

另存为之后看到刚才在 EditText 中输入的字符串:

android Shared Preferences最多保存大小 android 文件存储_Text_02


从文件中读取数据

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

从文件中读取文本数据代码:

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

  首先通过 openFileInput() 方法获取到了一个 FileInputStream 对象,然后借助它又构建出了一个 InputStreamReader 对象,接着再使用 InputStreamReader 构建出一个 BufferedReader 对象,这样我们就可以通过 BufferedReader 进行一行一行地读取,把文件中地所有文本内容全部读取出来,并存放在一个 StringBuilder 对象中,最后将读取到的内容返回就可以了。

重新启动程序时 EditText 能够保留上次输入的内容: