Android 中存储数据的三种方式中的前两种
大纲
- 持久化技术简介
- 方式一:文件存储
- 方式二:SharedPreferences 配置文件存储
# 持久化技术简介
持久化技术是指将那些内存中瞬时存在的数据保存到存储设备
(文件,硬盘)
中,保证即使设备(手机,电脑)
在关机的情况下,数据也不会丢失。
保存在内存中的数据是处于瞬时
状态的,关闭程序 or 关机数据就销毁了。
而保存在存储设备中的数据是处于持久化
状态的,不把硬盘砸烂数据就不会丢失。
Android 系统中提供了三种方式用于实现数据持久化功能,及 文件存储
、
SharedPreferences
存储以及 数据库存储
。
#方式一:文件存储
文件存储不对存储内容进行任何格式化处理,因而适合存储一些简单的文本数据或二进制数据。
##获取流对象
输出流
OpenFileOutput(String Filename, int mode):继承自 FileOutputStream
输入流
OpenFileInput(String fileName):继承自 FileInputStream
核心就是利用Context对象提供的两个方法获取到流,再利用Java的各种流来进行读写操作。
与Java IO操作几乎一致,Android 只要传入文件名即可,路径自动在 /data/data/<package name>/files/
目录下。
##存取数据到文件
/**
* MODE_APPEND 追加
* MODE_PRIVATE 覆盖
*/
private void writeDate() {
String data = "Hello Android";
try (FileOutputStream output = openFileOutput(fileName, MODE_PRIVATE);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output))) {
writer.write(data);
} catch (Exception e) {
e.printStackTrace();
}
private void readDate() {
String data = "";
try (FileInputStream input = openFileInput(fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {
String data = reader.readLine();
} catch (Exception e) {
e.printStackTrace();
}
}
#方式二:SharedPreferences 配置文件存储
键值对存储:保存的时候需要提供键和值,取出的时候用键去取值。
SharedPreferences提供多种不同数据类型的存储方法。存取数据类型不变。
##获取 SharedPreferences 对象
- Context.getSharedPreferences(String name, int mode)
/**
* @ param name 文件名
* @ param mode 模式 MODE_PRIVATE (只有当前APP可以对该文件进行读写)
*/
public SharedPreferences getSharedPreferences(String name, int mode)
- Activity.getPreferences(int mode)
/**
* @ param mode 模式 MODE_PRIVATE (只有当前APP可以对该文件进行读写)
*/
public SharedPreferences getPreferences(int mode)
跟Context的获取方式很相似,但文件名是系统根据当前 活动名
生成的。
- PreferenceManager.getDefaultSharedPrefernces(Context context)
/**
* @ param context 上下文对象
*/
public static SharedPreferences getDefaultSharedPreferences(Context context)
静态方法,自动使用当前应用程序的 包名
作为文件名。
获取到了对象,下面该进行存取操作了。
##存取数据到 SharedPreferences 共享的参数
存储
- 调用 SharedPreferences 对象的 edit() 方法获取到 SharedPreferences.Editor 对象。
- 向 SheredPreferences.Editor 对象添加数据:
putInt()
、putString()
、putBoolean()
... - 调用 SheredPreferences.Editor 对象 apply() 方法将添加的数据提交存储。
// 存储数据
SharedPreferences sharedPreferences = getSharedPreferences(spName, MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putString("userName", "Change");
edit.apply();
}
读取
- 调用 SheredPreferences 对象的方法读取数据:
getInt()
、getString()
、
getBoolean()
...
SharedPreferences sharedPreferences = getSharedPreferences(spName, MODE_PRIVATE);
String userName = sharedPreferences.getString("userName", "");
SharedPreferences 类的get...系列方法需要传入两个参数,第一个为键,第二个为键不存在后返回的默认值。
#总结
总结一下核心类
- 文件存储核心类
输出流
OpenFileOutput(String Filename, int mode)
输入流
OpenFileInput(String fileName)
- 配置文件存储核心类
获取数据
SharedPreferences
存储数据
SharedPreferences.Editor
网友评论