现在的位置: 首页 > 综合 > 正文

Android的数据存储和IO

2013年09月21日 ⁄ 综合 ⁄ 共 3143字 ⁄ 字号 评论关闭

1、使用SharedPreferences

有些时候,应用程序有少量的数据需要保存,而且这些数据的格式简单:都是普通的字符串、标量类型的值等,比如应用程序的各种配置信息(如是否发开音乐、是否使用振动效果等)、小游戏的玩家积分(如扫雷英雄榜之类的)等,对于这种数据,Android提供了SharedPreferences进行保存。

(1)SharedPreferences和Editor简介

SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的key-value对。

SharedPreferences接口主要负责读取应用程序的Preferences数据,它提供了如下常用方法访问SharedPreferences中的key-value对:

boolean contains(String key):判断SharedPreferences是否包含特定key的数据。

abstract Map<String,?>  getAll():获取全部的key-value对。

boolean getXxx(String key,xxx defValue):获取SharedPreferences数据里指定key对应的value。如果key不存在,返回默认值defValue。其中xxx可以是boolean、float、int、long、String等各种基本类型。

SharedPreferences接口并没有提供写入数据的能力,而是通过SharedPreferences的内部接口,SharedPreferences调用edit()方法即可获取它对应的Editor对象,Editor提供如下方法向SharedPreferences写入数据:

SharedPreferences.Editor  clear():清空SharedPreferences里的所有数据。

SharedPreferences.Editor  putXxx(String key,xxx value):向SharedPreferences存入指定key对应的数据。其中xxx可以是boolean、float、int、long、String等各种基本类型。

SharedPreferences.Editor  remove(String key):删除SharedPreferences里指定key对应的数据项。

boolean commit():当Editor编辑完成后,调用该方法提交修改。

SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name,int mode)方法获取SharedPreferences实例,第二个参数支持如下几个值:

Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读写。

Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其它应用程序读,但不能写。

Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其它应用程序读、写。

SharedPreferences数据总是保存在/data/data/<package name>/shared_prefs目录下,以XML格式保存,根元素为<map.../>.

(2)、读、写其它应用SharedPreferences

在某个应用程序的SharedPreferences指定相应的访问权限之后(MODE_WORLD_READABLE可被其它应用程序读取,MODE_WORLD_WRITEABLE可被其它应用程序读写),可以在其它应用程序对之前所说应用程序的SharedPreferences进行操作:

a、创建其它程序对应的Context,例如如下代码:

useCount=createPackageContext(“org.lxj.io”,Context.CONTEXT_IGNORE_SECURITY);其中“org.lxj.io”是其它程序的包名

b、调用其它程序Context的getSharedPreferences(String name,int mode)即可获取相应的SharedPreferences对象,示例代码如下:

SharedPreferences  prefs=useCount.getSharedPreferences(“count”,Context.MODE_WORLD_READABLE);

c、如果需要写入数据,调用edit()方法获取Editor即可。

2、File存储

(1)openFileOutput和openFileInput

Context提供了如下两个方法来打开应用程序的数据文件夹里的文件IO流:

FileInputStream  openFileInput(String  name):打开应用程序的数据文件夹下的name文件对应输入流。

FileOutputStream  openOutput(String  name,int mode):打开应用程序的数据文件夹下的name文件对应输出流。第二个参数指定打开文件模式:

MODE_PRIVATE:该文件只能被当前程序读写。

MODE_APPEND:以追加方式打开该文件,应用程序可向该文件中追加内容。

MODE_WORLD_READABLE:该文件的内容可被其它程序读取。

MODE_WORLD_WRITEABLE:该文件的内容可由其它程序读、写。

除此外,Context还提供如下方法访问应用程序的数据文件夹:

getDir(String  name,int  mode):在应用程序的数据文件夹下获取或创建name对应的子目录。

File getFilesDir():获取该应用程序的数据文件夹的绝对路径。

String[ ]  fileList():返回该应用程序的数据文件夹下的全部文件。

deleteFile(String):删除该应用程序的数据文件夹下的指定文件。 

(2)、读写SD卡上的文件

为了更好地存、取应用程序的大文件数据,应用程序需要读、写SD卡上的文件。SD卡大大扩充手机的存储能力。

读、写SD上的文件按如下步骤:

a、调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序有读写SD卡的权限。示例代码如下:

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED):如果插入SD卡,并且程序有读写SD卡的权限,返回true

b、调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录。

c、使用FileInputStream、FileOutputStream、FileReader或FileWriter读、写SD卡里的文件。

d、为了有读写SD的权限,在AndroidAManifest.xml文件中要添加如下两条配置:

<uses-permission  android:name="android.permission.MOUNT_UNMOUNT_FILESYATEMS">(在SD卡中创建和删除文件权限)

<uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE">(向SD卡写入数据权限)

抱歉!评论已关闭.