我们知道程序在运行时,数据是存放在运行内存中的,一旦程序关闭,数据就会丢失。那么我们要想数据不丢失怎么办呢?那就需要将数据存储在外存中,比如sd卡和手机自身内存。
存储方式一:文件存储与读取
Context类中提供了一个openFileOutput ()方法,可以将数据存储到指定的文件中。这个方法有两个参数。第一个是文件名,文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/<package name> /files/目录下的;第二个参数是文件测操作模式,MODE_PRIVATE & MODE_APPEND 。 MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件已存在就往文件里面追加内容,不存在就创建新文件。使用代码实例:
public void save(String str){
FileOutputStream fos=null;
BufferedWriter bw=null;
try {
fos=openFileOutput("myTestData", Context.MODE_PRIVATE);
bw=new BufferedWriter(new OutputStreamWriter(fos));
try {
bw.write(str);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
if(bw!=null)
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Context类中提供了一个openFileInput ()方法,这个方法只有一个参数,那就是要读取的文件的文件名
使用实例:
public String load(String filename){
String str="";
StringBuilder content = new StringBuilder();
FileInputStream fis=null;
BufferedReader br=null;
try {
fis=openFileInput(filename);
br=new BufferedReader(new InputStreamReader(fis));
try {
while((str=br.readLine())!= null ){
content.append(str);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
文件存储使用的基本都是java的io流,熟悉java的文件操作的应该很容易读懂上面的代码。文件存储简单,但是如果要存储复杂的数据,就得自己定义存取结构与方式,才能够正确的存储与获取。
存储方式二·:SharedPreferences存储
不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的。
用代码来看可能更清晰些。
存:
SharedPreferences.Editor editor=getSharedPreferences("data", Context.MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 18);
editor.putBoolean("married", false);
editor.commit();
取:
SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);
Log.d("MainActivity", "name is " + name);
Log.d("MainActivity", "age is " + age);
Log.d("MainActivity", "married is " + married);
很明显,SharedPreferences存储对于键值对的数据存储很方便。比如存储用户名,密码,就可以实现一个记住密码功能。但是对于密码这种私密性数据都会进行加密存储,不会直接存储的,这里就不祥细论述了。