Android系统中主要提供了三种方式用于简单的实现数据持久化功能:
文件存储(手机自带的内存)、SharedPreferences存储以及数据库存储, 当然还可以用sd卡存储
1,文件存储
特点:手机自带的内存,只能供当前应用程序访问,其他应用程序访问不了,程序卸载这些数据也会随着消失
原理:
基本是先获取一个文件的输出流,然后把信息write进去,最后关闭流
a,通过上下文类
context的openFileOutput()方法获得一个FileOutputStream输出流
b,要写入的内容通过write()写到FileOutputStream对象
c,关闭流
openFileOutput()可以将数据存储到指定的文件中,方法有两个参数,第一个参数是文件名,不需要带上完整的路径,因为这里都是默认存储到data/data/file下面的
第二个参数是文件的操作模式,两种:MODE_PRIVATE和MODE_APPEND.前者是覆盖,后者是追加
(MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,前者是允许只读,后者是只写,但是都被抛弃,因为不安全)
- private void save(String inputText ) {
- FileOutputStream fos = null;
- BufferedWriter writer = null;
- try {
- fos = openFileOutput( "data", Context.MODE_PRIVATE);
- writer = new BufferedWriter( new OutputStreamWriter(fos));
- writer.write( inputText);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- try {
- if( writer != null)
- writer.close();
- }catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
主要的就是上面的三句话
openFileOutput打开一个输出流,然后构建一个字节缓冲流对象然后写数据,
此外还有几个方法需要特别注意一下 ,这几个方法对于文件关系提供了更好的支持,配合上面介绍的方式, 就可以对文件的数据进行常规的CRUD操作 (增删改查),方法如下:
File getFIlesDir ():获取文件系统的绝对路径。
boolean
deleteFile(String name):删除一个指定文件名为name的文件。
String[] fileList() :当前应用内部存储路径下的所有文件名。
- //帮助我们返回一个目录
- //context.getCacheDir ()的话就是保存到cache缓存文件夹下面
- File file=new File(context.getFilesDir(), "userinfo.txt");
- FileOutputStream fos= new FileOutputStream( file);
- //zhangsan 123
- fos.write(( username+ "##"+ password).getBytes());
- fos.close();
2、sharedpreference 存储(一般用于保存用户设置偏好);
特点如下:
@1 以键值对的形式保存到data/data/应用程序包名/shared_prefs目录的XXX.xml文件中
@2目前支持的数据类型有String int float boolean long
@3不支持自定义的Object
@4通常用来存储App上的用户配置信息.如:是否震动,是否打开背景音乐 小游戏积分 用户账号密码信息
要使用该方法来存储数据就要先
获得一个SharedPreferences对象,有三种获取方法
a,Context上下文类中的getSharedPreferences
两个参数,第一个是指定文件的名称,不在就创建。目录也是在data/data/包名/shared_prefs目录下
第二个参数是操作模式。MODE_PRIVATE是默认的,只允许当前的应用程序对其进行操作,MODE_MULTI_PROCESS是一般用于有多个进程中对同一个SharedPreferences文件进行读写的情况,同样有MODE_WORLD_WRITEABLE MODE_WORLD_READABLE两个被废弃的模式
b,Activity类中的getPreferences
只有一个参数,也是操作模式,文件的名称是默认的当前活动的类名
c,PreferenceManager管理类中的getDefaultSharedPreferences()
管理类中的一个静态方法,接收一个context参数,自动把当前的包名作为文件命名的前缀
得到一个对象之后,有三步来进行数据的存储
1,调用对象的edit方法获得一个SharedPreferences.Editor对象
2,向.Editor对象添加数据,putBoolean()或者是putString(),,等等putXXX()方法
3,调用commit方法将添加的数据提交,完成数据的存储操作
例子:
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub