在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目录
很多时候我们的软件需要对处理后的数据进行存储或再次访问。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目录