数据存储全方案----详解持久化技术
保证一些关键的数据不丢失----数据持久化技术
一、 持久化技术简介
Android系统中主要提供了3种方式用于简单地实现数据持久化功能:文件存储、SharedPreference存储、数据库存储。除了这3种方式之外,还可以将数据保存在手机的SD卡中。
二、 文件存储
文件存储是Android中最基本的一种数据存储方式,不对存储的内容进行任何格式化处理,所有数据原封不动地保存到文件中,适合存储一些简单地文本数据或二进制数据。
1. 将数据存储到文件中
Context类中提供了一个openFileOutput();能将数据存储在指定的文件中。这个方法能接收两个参数。
(1) 第一个参数是文件名:且所有文件的默认路径存储到:/data/data//files/目录下的。
(2) 第二个参数是文件的操作模式:表示当指定同样文件名的时候,所写内容会覆盖原文件中的内容,而MODE_APPEND表示文件已存在。
(1) 将activity.xml中的代码改为一个文本框
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Type something here"/>
(2) 修改MainActivity中的代码
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();
}
}
}
}
需要在sdk中的C:\Users\duo.gao\sdk\platform-tools目录下进行开通权限
点击导入到电脑上,并打开data文件。
2. 从文件中读取数据
Context类提供了一个openFileInput();方法,用于从文件中读取数据。他只接收一个参数,即要读取文件名,到目录下去加载这个文件,并返回一个FileInputStream对象,在通过Java流的方式将数据读取出来。
(1) 修改MainActivity代码
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);
String inputText=load();
if (!TextUtils.isEmpty(inputText)){
edit.setText(inputText);
edit.setSelection(inputText.length());
Toast.makeText(this, "Restoring succeeded!!1", Toast.LENGTH_SHORT).show();
}
}
@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