Android 数据存储方案
SharedPreferences 存储
SharedPreferences采用键值对存储
存储在share_prefs文件夹中
写数据步骤
第一步 先获取SharedPreferences对象
有两个方法.
1.Context类中的getSharedPreferences()方法
getSharedPreferences()方法的两个参数
第一个参数式文件名字,第二个参数式写入模式,现在只有一个写入模式其他的都被废弃MODE_PRIVATE
2.Activity类中的getPreferences()方法
getPreferences()只有一个参数就是写入模式,文件名直接式当前活动的类名
第二步.
获取SharedPreferences.Editor对象
用获取的SharedPreferences对象的.edit()方法就可以获得此对象
第三步 写数据
SharedPreferences.Editor editor = getSharedPreferences("note",MODE_PRIVATE).edit();
editor.putString("date","今天要干的事情");
可以调用多种方法,写入整形,布尔型,String型.
第四步 调用apply()方法应用数据
editor.apply()
方法 将刚写进去的数据应用上
读数据步骤
读取数据就更加简单了
第一步 获取SharedPreferences对象
跟刚才一样的方法SharedPreferences对象
第二步 获取值
获取值的方法与SharedPreferences.Editor对象的put方法一一对应
例如SharedPreferences.getString()方法,但是此方法有两个参数
第一个参数是键,第二个参数是如果找不到键返回的默认值
如果存在,返回值是键对应的值
2.文件储存
用到Java的文件流处理
Context类中的函数openFileOutput()方法,两个参数,一个是文件名,第二个是模式,MODE_PRIVATE与MODE_APPEND
其余两个已经废除因为可以向别的程序写数据不安全
2.1. FileOutputStream,OutputStreamWriter, BufferedWriter的区别
FileOutputStream是字节流,OutputStreamWriter是字符流, BufferedWriter是把字符存到内存中在一起写入硬盘,不是一个一个写字符
2.2. 直接上代码
创建了两个方法sava()用于存数据,load()方法用于打开程序加载数据
public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
String s = load();
if(!TextUtils.isEmpty(s)){
editText.setText(s);
editText.setSelection(s.length());
}
}
@Override
protected void onDestroy() {
super.onDestroy();
String s = editText.getText().toString();
save(s);
}
public void save(String input){
FileOutputStream fileOutputStream = null;
BufferedWriter writer = null;
try{
fileOutputStream = openFileOutput("data", Context.MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
writer.write(input)
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if(writer!=null)
writer.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
public String load(){
FileInputStream fileinputStream =null;
BufferedReader bufferedReader = null;
StringBuilder content = new StringBuilder();
try {
fileinputStream = openFileInput("data");
bufferedReader = new BufferedReader(new InputStreamReader(fileinputStream));
String line;
while((line = bufferedReader.readLine())!=null){
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bufferedReader!=null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
}