Android数据存储
概述
Android开发中,经常会接触到数据存储, 故本文详细讲述下关于数据存储的知识,希望能够加深理解,时常回顾,由于本人才疏学浅,或有不当之处,望批评指教
数据存储方式
- 文本存储
- SharedPreferences
- SQLite数据库
- ContentProvider
文本存储
文本存储比较简单,不会对数据做格式化处理,适合存储一些简单的文本数据,默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载您的应用时,这些文件也会被移除。
Context类提供了两种方法打开数据文件的IO流
文本写入
FileOutputStream openFileOutput (String name, int mode)
该方法将数据输出到文件里,方法接受两个参数,第一个参数是文件名,注意文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/<packagename>/files
目录下的,基于该文件名创建文件;第二个参数是操作模式,
有两种模式可选
* MODE_PRIVATE
: 默认的操作模式,表示私有数据,只能被本应用访问,并且写入内容会覆盖源文件内容
* MODE_APPEND
: 表示若文件已存在,则往文件中追加内容,否则创建新文件。
private void write(){
String data = "举头望明月,低头思故乡";
BufferedWriter bufferedWriter = null;
try {
FileOutputStream fileOutputStream = openFileOutput("data", MODE_PRIVATE);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
bufferedWriter.write(data);
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if(bufferedWriter != null){
bufferedWriter.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
文本读取
FileInputStream openFileInput (String name)
该方法从文件中读取数据,直接受一个参数,即要读取的文件名,然后系统会自动到/data/data/<packagename>/files/目录下加载该文件
,并返回一个FileInputStream
对象
private String read(){
BufferedReader bufferedReader = null;
StringBuilder data = new StringBuilder();
try{
FileInputStream fileInputStream = openFileInput("data");
bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
String line = "";
while ((line = bufferedReader.readLine()) != null){
data.append(line);
}
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if(bufferedReader != null){
bufferedReader.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
return data.toString();
}
SharedPreferences
SharedPreferences
是基于XML文件存储的键值对保存数据的,并且支持多种不同的数据类型。文件存放在/data/data/<packagename>/shared_prefs/
目录下。当然,要使用SharedPreferences
存储数据,首先要忽的SharedPreferences
对象,可通过以下两个方法之一:
getSharedPreferences()
- 接受两个参数,第一个是文件名称,第二个指定操作模式getPreferences()
- 只接受操作模式参数,因只在Activity类中获取,故类名为文件名。
写入操作
- 调用
SharedPreferences
对象的edit()
方法获取SharedPreferences.Editor
对象 - 向
SharedPreferences.Editor
对象中添加数据,使用 putBoolean() 和 putString() 等方法 - 调用
commit()
或apply()
方法提交
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_APPEND).edit();
editor.putBoolean("flag", true);
editor.putInt("age", 22);
editor.putString("name", "hao");
editor.commit();
读取操作
- 获取SharedPreferences对象
- 使用
getXXX()
方法读取数据
SharedPreferences sharedPreferences = getSharedPreferences("data", MODE_APPEND);
SQLite数据库和ContentProvider内容较多,故放在单独的博客中讲解, 后续整理,加油。