欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

在android开发中进行数据存储与访问的多种方式介绍

程序员文章站 2023-12-03 14:45:34
数据存储与访问 很多时候我们的软件需要对处理后的数据进行存储或再次访问。android为数据存储提供了多种方式,分别有如下几种: 文件 sharedpreferences...
数据存储与访问
很多时候我们的软件需要对处理后的数据进行存储或再次访问。android为数据存储提供了多种方式,分别有如下几种:
文件
sharedpreferences
sqlite数据库
内容提供者(content provider)
网络

使用文件进行数据存储
首先给大家介绍使用文件如何对数据进行存储,activity提供了openfileoutput()方法可以用于把数据输出到文件中,具体的实现过程与在j2se环境中保存数据到文件中是一样的。
复制代码 代码如下:

public class fileactivity extends activity {
@override public void oncreate(bundle savedinstancestate) {
...
fileoutputstream outstream = this.openfileoutput("csdnt.txt", context.mode_private);
outstream.write("csdn".getbytes());
outstream.close();
}
}

openfileoutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.csdn.action/files/csdn.txt ,通过点击eclipse菜单“window”-“show view”-“other”,在对话窗口中展开android文件夹,选择下面的file explorer视图,然后在file explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。
openfileoutput()方法的第二参数用于指定操作模式,有四种模式,分别为: context.mode_private = 0
context.mode_append = 32768
context.mode_world_readable = 1
context.mode_world_writeable = 2

context.mode_private:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用context.mode_append
context.mode_append:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
context.mode_world_readable和context.mode_world_writeable用来控制其他应用是否有权限读写该文件。
mode_world_readable:表示当前文件可以被其他应用读取;mode_world_writeable:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
openfileoutput("csdn.txt", context.mode_world_readable + context.mode_world_writeable);

android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了context.mode_world_readable或者context.mode_world_writeable ,只有这样其他程序才能正确访问。

读取文件内容
如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用activity提供openfileinput()方法。
fileinputstream instream = this.getcontext().openfileinput("csdn.txt");
log.i("filetest", readinstream(instream));
readinstream()的方法请看本页下面备注。

或者直接使用文件的绝对路径:
file file = new file("/data/data/cn.csdn.action/files/csdn.txt");
fileinputstream instream = new fileinputstream(file);
log.i("filetest", readinstream(instream));
注意:上面文件路径中的“cn.csdn.action”为应用所在包,当你在编写代码时应替换为你自己应用使用的包。
对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定context.mode_world_readable和context.mode_world_writeable权限。

activity还提供了getcachedir()和getfilesdir()方法:
getcachedir()方法用于获取/data/data/<package name>/cache目录
getfilesdir()方法用于获取/data/data/<package name>/files目录