Android 持久化技术 文件存储
瞬时数据
瞬时数据是指那些存储在内存中,有可能会因为程序关闭或其他原因导致内存被回收而丢失的数据。
持久化技术
数据持久化
数据持久化是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机、电脑关机的情况下,这些数据仍然不会丢失。
持久化技术提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。
Android系统主要提供了3种方式用于简单地实现数据持久化功能
- 文件存储
- SharedPreferences
- 数据库存储
- 手机SD卡(前三种比较简单,这一种是比较安全)
文件存储
将数据存储到文件中
Context()类种提供一个openFileOutput()方法,可以用于将数据存储到指定的文件中。这个方法接受两个参数:
第一个参数:文件名,这里指定的文件名不可以包含路径,所有的文件都默认存储到/data/data/<package>/files/目录下。
第二个参数:文件的操作模式。MODE_PRIVATE,MODE_APPEND。
MODE_PRIVATE:默认的操作模式,表示当指定同样的文件名的时候,所有写入的内容将会覆盖源文件中的内容。
MODE_APPEND:则表示如果该文件已存在,则往文件里追加内容,不存在就创建新文件。
创建一个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 something 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", 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();
}
}
}
}
点击Back键关闭程序,输入的内容就已经被保存到文件中了。需要确定一下数据已经被成功保存。从下图来看,已经成功保存道到名为data的文件中去了。保存进去了还不够,还需要下次启动程序的时候将内容还原到EditText中。这就需要从文件中读取数据。
从文件中读取数据
Context类还提供了一个openFIleInput()方法,用于从文件中读取数据。他只接受一个参数。即要读取的文件名。系统自然要到/data/data/<package name>/files/目录下去加载这个文件,并返回一个FileInputString对象,得到这个对象后再通过java流的方式就可以将数据读取出来了。
修改MainActivity.java
@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 successed",Toast.LENGTH_SHORT).show();
}
}
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 {
try {
if(reader!=null){
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return content.toString();
}
本文地址:https://blog.csdn.net/guliguliguliguli/article/details/110291051