您的位置:首页 > 移动开发 > Android开发

Android SDK : Local Datas Storage

2015-09-14 14:16 295 查看

Android中三种数据存储方式:

SharedPreferences:轻量键-值方式存储,以xml文件方式保存

file management:采用java.io.*库所提供的I/O接口读写文件

SQLite databases:SQLite是轻量级嵌入式内置数据库

Android SharedPreferences的使用介绍

SharedPreferences是轻量级的数据保存方式;通过SharedPreferences可以将NVP(Name/Value Pair, 名称/值对)保存在Android的文件系统中,而且SharedPreferences完全屏蔽了对文件系统的操作过程;开发人员通过SharedPreferences对NVP进行保存和读取;

访问模式/数据共享

私有(Context.MODE_PRIVATE):数据只能被本应用读取

全局读(Context.MODE_WORLD_READABLE)数据能被其他应用程序读,但不能写

全局写(Context.MODE_WORLD_WRITEABLE)数据能被其他应用程序写,但不能读

获取SharedPreferences对象

定义SharedPreferences访问模式

下面的代码将访问模式定义为私有模式

public static int MODE = MODE_PRIVATE;


有时候需要将SharedPreferences的访问模式设定为既可以全局读,也可以全局写

public static int MODE = Context_MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;


定义SharedPreferences文件名,这个文件名称与在Android文件系统中保存的文件同名

public static  final String PREFERENCE_NAME = "SaveSetting";


将访问模式和SharedPreferences名称做为参数,传递到getSharedPrerences()函数,并获取到SharedPrerences对象

SharedPreferences sharedPreferences = getSharedPreferences(PREFERECES_NAME, MODE);


数据的写入

利用前面获取SharedPreferences对象的edit()方法获的它对应的Editor对象

利用Editor对象提供的PutXXX方法写入数据

调用Editor对象提供的commit()方法提交修改数据

SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name","Tom");
editor.putInt("Age",20);
editor.putFloat("height",(float) 1.70);
editor.commit();


SharedPreferences.Editor clear() 清除所有数据


数据的读取

调用getSharedPreferences()函数,并在函数的第一个参数中指明需要访问的SharedPreferencs的名称
<
4000
/li>
通过getXXX()函数获取保存在SharedPreferences中的NVP

SharedPreferences sharedPreferences = getSharedPreferences(PRIVATE_NAME, Mode);
String name = sharedPreferences.getString("Name","");
int age = sharedPreferences.getInt("Age", );
float height = sharedPreferences.getFloat("Height", );


getXXX()函数第一个参数是NVP的名称

第二个参数是在无法获取到数值的时候使用缺省值

数据的结构、位置和注意事项

其实,每装一个应用程序时,SharedPreferences文件就保存在data/data/< package name > /shared_prefs目录下,其中的文件就是我们的数据



dataStore.xml文件是以XML格式保存的信息,内容如图:



访问其他应用程序数据需要满足三个条件:

共享者将SharedPreferences的访问模式设置为全局读或全局写

访问者知道应用程序包名和SharedPreferences的名称

通过Context获取SharedPreferences对象

访问者确切知道每个数据的名称和数据类型

文件存储

Android允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部储存器上面,在linux系统下的data/data/< packagename >/files 目录中。

Android支持标准java的IO流体系

FileInputStream类

FileOutputStream类

Context提供了能够简化读写流式文件过程的函数

openFileOutput():打开文件输入流

openFileInput():打开文件输出流

openFileOutput()函数

openFileOutput()函数用于写入数据。如果指定的文件夹不存在,则创建一个新的文件。

public FileOutputStream openFileOutput(String name, int mode)


第一个参数是文件名称,这个参数不可以包含描述路径的斜杠

第二个参数是操作模式

函数的返回值是FileOutputStream类型(字节流)

Android系统支持四种文件操作模式

模式说明
MODE_PRIVARE私有模式,文件仅能够被文件创建程序访问,或具有相同的UID的程序访问
MODE_APPEND追加模式,如果文件已经存在,则在文件的结尾处添加新数据
MODE_WORLD_READABLE全局读模式,允许任何程序读取私有文件
MODE_WORLD_WRITEABLE全局写模式,允许任何程序写入私有文件
使用openFileOutput()函数建立新文件的示例代码如下

String FILE_NAME = "fileDemo.txt"


FileOutputStream fos = openFileOutput(FILE_NAME,Context.Mode_PRIVATE);


String text = "some data";


fos.write(text.getBytes());


fos.flush();


fos.close();


第1行代码定义了建立文件的名称fileDemo.txt

第2行代码使用openFileOutput()函数以私有模式建立文件

第3行代码调用write()函数将数据写入文件

第4行代码调用flush()函数将所有剩余的数据写入文件

第6行代码调用close()函数关闭FileOutputStream

**openFileOutput()函数

为了提高文件系统的性能,一般调用write()函数时,如果写入的数据量较小,系统会吧数据保存在数据缓冲区,等数据量累积到一定程度时在一次性的写入文件中

flush()函数,可以将缓冲区内所有的数据写入文件

文件操作结束后,用close()关闭文件

openFileInput()函数

openFileInput()函数用于打开一个与应用程序联系的私有文件输入流

当文件不存在时,抛出FileNotFoundException异常;

openFileInput()函数的语法格式如下:

public FileInputStream openFileInput(String name)


第一个参数也是文件名称,同样不允许包含描述路径的斜杠

使用openFileInput()函数打开已有文件夹的示例代码如下

String FILE_NAME = "fileDemo.txt";


FileInputStream fis = openFileInput(FILE_NAME);




byte[] readBytes = new byte[fis.available()];


while(fis.read(readBytes)!=-1){ }


上面两段代码在实际使用过程中会遇到错误提示,因为文件操作可能会遇到各种问题而最终导致操作失败,因为此代码应该使用try/catch捕获可能产生的异常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: