数据持久化指哪些内存中的瞬时数据保存到存储设备中 保证手机或电脑关机的情况下 数据仍然不会丢失,保存在内存中的数据是处于瞬时状态 而保存在存储设备中的数据是处于持久状态的
持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行切换
Android系统中主要提供了3种方式用于简单的实现数据持久化功能 即文件存储 SharedPreference存储 以及数据库存储
文件存储
文件存储是安卓中最基本的数据存储方式 它不对存储的内容进行任何格式化处理 所有数据都是原封不动地保存到文件当中 因此它比较适合用于存储一些简单的文本数据或者二进制数据。 如果想使用文件存储的方式保存一些较为复杂的文本数据 就需要定义一套自己的格式规范 这样可以方便以后将数据从文件中解析出来
将数据存储到文件中
通过openFilwOutput()方法能够得到一个FileOutputStream对象 再借助塔构建出一个OutPutStreamWriter对象 创建出BufferedWriter 将文本内容写入到文件中
完整安卓案例
在xml写一个可输入的文本框
<EditText
android:id="@+id/edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Write Something here"
/>
可以在内部输入任意内容 但是你输入的内容不会被保存 因为你输入的内容只是瞬时数据 在activity被销毁后就被回收 而我们要做的就是在数据被回收前 将它存储到文件中
public class MainActivity extends AppCompatActivity {
private EditText edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = 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();
}
}
}
}
通过as的DeviceFileExplorer可以查看到保存的文件
在 data/data下找到对应的包
打开后 会显示你在app输入的数据
读取数据
类似于将数据存储到文件中,Context类中还提供了openFileInput()方法 用于读取数据
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();
}
最终代码
可以实现本地保存输入的文字数据 并在下一次启动时读取上一次输入的文字数据并显示出来
public class MainActivity extends AppCompatActivity {
private EditText edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = findViewById(R.id.edit);
String inputText = load();
if (!TextUtils.isEmpty(inputText)) {
edit.setText(inputText);
edit.setSelection(inputText.length());
}
}
@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();
}
}
}
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();
}
}
废弃不用了 打扰了 现在使用MMKV 和File