/*********************************************************************************************************************/
安卓中的数据持久化存储共有三种方式, 文件存储,SharedPreferences,数据库存储,下面分别介绍
文件存储
FileOutputStream Context.openFileOutput (String fileName,String authority )
String fileName 文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有的文件都是存储到/data/data/<packagename>/files/ 目 录 下 的
String authority 文件的操作模式,主 要 有 两 种 模 式 可 选 ,MODE_PRIVATE 和 MODE_APPEND
MODE_PRIVATE 是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容,
MODE_APPEND 则表示如果该文件已存在就往文件里面追加内容,不存在就创建新文件。其实文件的操作模式
本来还有另外两种, MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE,这两种模式表示允许其他的应用程序对我们程序中的文件进行读写操作,不过由于这两种模式过于危险,很容易引起应用的安全性漏洞,现已在 Android 4.2 版本中被废弃。
将数据从文件中读取出来
FileInputStream Context.openFileInput (String fileName)
注:因为 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE都已经被废弃,所以文件的读取只涉及到本应用,而本应用的文件都是存储到默认目录下,所以写入跟读取文件时不必再指定文件的路径,只指定文件名即可。
私有方式 -rw-rw----
全局可读 -rw-rw-r--
全局可写 -rw-rw--w-
全局可读写 -rw-rw-rw-
linux 系统的文件的访问权限
第一个 - 代表文件
d 代表目录
- | rw- | rw- | ---
当前用户 用户组 其他人
android下面每一个应用程序 操作系统都会给他分配一个用户名
补充:
Environment.getExternalStorageDirectory()//获取sd卡的路径
Environment.getExternalStorageState() //获取sd卡的状态
SD卡状态:
Environment.MEDIA_MOUNTED SD卡已挂载
获取SD卡大小:
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long totalbytes = blockSize*totalBlocks;
System.out.println(totalbytes+“KB”);
Activity还提供了getCacheDir()和getFilesDir()方法:
getCacheDir() 方法用于获取/data/data/<package name>/cache目录
getFilesDir() 方法用于获取/data/data/<package name>/files目录
程序的临时数据可以存放到这个目录 ,
用户可以手工清除掉这个目录里面的内容
SharedPreferences
Android 中主要提供了三种方法用于得到 SharedPreferences 对象。
1. Context 类中的 getSharedPreferences(String name,int mode)方法
String name:SharedPreferences文件的名称,如果指
定的文件不存在则会创建一个, SharedPreferences 文件都是存放在/data/data/<package
name>/shared_prefs/目录下的。
int mode :
操作模式,主要有两种模式可以选
择:
MODE_PRIVATE 仍然是默认的操
作模式,和直接传入 0 效果是相同的,表示只有当前的应用程序才可以对这个
SharedPreferences 文件进行读写;
MODE_MULTI_PROCESS 则一般是用于会有多个进程中对同一个 SharedPreferences 文件进行读写的情况。类似地, MODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE 这两种模式已在 Android 4.2 版本中被废弃。
返回值 :SharedPreferences
2. Activity 类中的 getPreferences(int mode)方法
int mode :操作模式参数
返回值 :SharedPreferences
注:使用这个方法时会自动将当前活动的类名作为 SharedPreferences 的文件名
3. PreferenceManager 类中的 getDefaultSharedPreferences(Context context)方法
Context context : 上下文
注:使用这个方法时会自动将当前应用程序的包名作
为前缀来命名 SharedPreferences文件
读写数据
向 SharedPreferences 文件中存储数据,主要可以分为三步实现
1. 调用 SharedPreferences 对象的 edit()方法来获取一个 SharedPreferences.Editor 对象。
2. 向 SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用
putBoolean 方法,添加一个字符串则使用 putString()方法,以此类推。
3. 调用 commit()方法将添加的数据提交,从而完成数据存储操作。
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE);
editor.putBoolean("isTrue",true);
editor.commit();
从 SharedPreferences 文件中读取数据
调用SharedPreferences 对象的
getBoolean(String key,String default)......获取数据
boolean isTrue = getPreferences(MODE_PRIVATE).getBoolean("isTrue",false);
清除SharedPreferences 文件中的数据
调用SharedPreferences 对象的clear()方法
数据库存储
见我之前的两篇博客