概述
持久化技术就是将内存中的瞬时数据保存到存储设备中,保证在手机关机或某一应用程序关闭的时候,数据不会丢失。
Android存储文件和数据的地方:
- RAM、ROM、内存(内部存储器)、
- APP程序里面(Assets,raw,res),
- SD卡(早期的安卓的可以插卡,现在的不支持了,但是有些 arm板 嵌入式方向的还是带卡槽的)
- 网络
(参考dadachenchen的文章,原文:https://blog.csdn.net/dadachenchen/article/details/84347616)
- RAM、ROM 这些东西我们就别碰了,不然一大堆问题,Environment.getRootDirectory() 需要获取root权限,不合适
- 内存和SD卡 大家得理解 Environment.getExternalStorageState() 代表的是什么意思,不是插卡的SD卡,而是说你买了开发板、手机,厂家送你的存储地方(直接你得让他送你哈)。 这部分作为主要的存储路径,小数据和大数据都适用。
- SD卡,黑色那张卡,老古董,现在手机都没有了,不建议大家使用
- 网络,请求自己的服务器,读取数据,URI的方式,httpClient post 和 get 两种请求数据的方式
Android中主要提供了3中数据持久化方式:
- 文件存储
- AharePrefernces存储
- SQLite数据库存储
- 保存于手机SD卡(不推荐)
在AS中查看模拟器文件存储的方式:
可以在侧边栏打开Device File Explorer选择相应的文件夹进入查看(一般为data/data/package name/files)
一:文件存储
Android中最基本的数据存储方式,它不对存储的任何东西进行任何格式化的处理,所有数据元丰不动的保存到文件中。因此适用于存储一些简单的文本数据或二进制数据。
利用Context中openFileOutput()方法,可以将数据存储到指定的文件中。
利用Context中openFileInput()方法,可以从指定文件中读取数据。
(所有文件默认存储到/data/data/<package name>/files目录下)
/*
* 利用java IO流的形式完成对文件的存储(原样存储)
* */
/*
*@author: banzh
*@function: 从存储文件中恢复数据到TextView中,测试数据的保存
* 默认从data/data/package name/files目录下恢复文件。
* 所以openFileInput()方法只是默认提供files目录下的DATA文件即可
*@time 2019/5/24 18:15
**/
private String load() {
FileInputStream fileInputStream;
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try {
fileInputStream = getActivity().openFileInput("DATA");
reader = new BufferedReader(new InputStreamReader(fileInputStream));
String line = "";
while ((line = reader.readLine()) != null){
builder.append(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return String.valueOf(builder);
}
/*
*@author: banzh
*@function: 利用java IO 流的形式保存数据(原样保存)
* 数据默认保存到data/data/package name/files/DATA中
*@time 2019/5/24 18:16
**/
private void save(String input) {
FileOutputStream outputStream = null;
BufferedWriter bufferedWriter = null;
try {
outputStream = getActivity().openFileOutput("DATA", Context.MODE_PRIVATE);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write(input);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (bufferedWriter != null){
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
二:SharedPreferences存储
SharedPreferences是利用键值对的形式来存储数据的,且支持不同的数据类型,在对数据操作(读取)的时候通过对应的键将其内容读取出来。
SharedPreferences的文件都是存放在/data/data/<package name>/shared——prefs/目录下。
获取SharedPreferences对象的方式:
- Context类中的getSharedPreferences()
- Activity类中的getPreferences()
- PreferenceManager类中的getDefaultSharedPreferences()
/*
*@author: banzh
*