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


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



相关阅读:
java 函数的重载和重写实例代码
浅谈php正则表达式中的非贪婪模式匹配的使用
PHP的时间戳与具体时间转化的简单实现
C++中的重载、覆盖、隐藏介绍
(图)全新windows 10 Build 10074泄露
node.js中的fs.fsyncSync方法使用说明
PHP无限分类(树形类)
浅析Java的Spring框架中IOC容器容器的应用
史上最详细的js日期正则表达式分享
试用php中oci8扩展
c#网络唤醒功能实现
jQuery ajax方法传递中文时出现中文乱码的解决方法
win8.1系统Chrome浏览器出现"没有注册类"的解决方法
js返回前一页刷新本页重载页面
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 绍兴-德州 云浮东-柳州 赶水-醴陵 贵港-邵东 包头-武威 德惠-铁力 宜昌东-阳新 齐齐哈尔南-扶余北 九营-富锦 山丹-蔡家坡 三穗-弋阳 宿州-义乌 瓦房店-东丰 四平-亳州 定远-天津西 盘锦-东辛庄 平安驿-大板 晋州-兴国 扎音河-潮水 西阳岔-水洞 亳州-大虎山 浠水-唐山 无锡-渭南 高碑店-武昌 项城-上海 辽阳-泊头 太平镇-九营 长治-鲁山 济南-靖边 通化-汤山城 沈阳北-滕州东 三源浦-唐山北 兴国-惠州 襄阳-梁山 胶州-安顺 兴安北-南宁东 嘎拉德斯汰-经棚 营盘湾-乌兰胡同 泉州-德州东 九台-春阳 牡丹江-定州 尚家-宋 太原-枣林 武穴-宣威 平顶庙-哲里木 大连-山市 古鲁满汗-下坑子 洪洞西-阳泉北 羊圈子-草河口 大同-西平 刁家段-金家店 白沙坡-花家庄 四方台-一面坡 康金井-开原 广州东-秦皇岛 略阳-北京西 阿城-迎春 克东-扶余 兴隆镇-金山屯 清原-柳河 漳州-武夷山北 崇信-平凉 安陆-黄石 武威南-邳州 文水-凤州 灵宝-温州 大连-凌源 怀仁-聊城 南昌-遂宁 威宁-柳河 煤田-大雁 徐州-新县 凌源-义县 连江-余杭 定州-吴堡 固原-土桥子 沈阳-带岭 辽阳-商丘 灵宝-桂林北 交城-武威 上海列车火车站到邯郸路99号上海材料研究所怎么走有地铁哇
福建到北京问题。_福建到北京问题。
广东中山大学有那些好专业推荐?或者华工的?
天柱山旅游路线,不要复制,只要你去过大致给我说下就行了,谢谢...
持报到证到生源地教育局报到时“生源地和户口所在地不一致”
从孝感到鸳鸯溪坐车要多长时间阿
从石家庄开往广州的T89次火车列车在哪里查票
中山古镇到于都车票多少
东莞东到成都现在要经过哪些车站T126次车
从西安火车列车站到西稍门怎么走?
请问从南京到北京的动车,持学生证可以打折吗
请问一下,在涿州市火车列车站坐13路(或7路)到凌云集团需要多长
从郑州怎么走去小冀京华园
从代县怎样去宁武_从代县怎样去宁武
哈密铁路游泳馆在哪具体位置怎么坐车哪位好心人说下谢谢
我在青岛开发区,想把台式液晶电脑发到广东东莞,慢点没事,
石家庄到天津北的列车有哪些?
广东汕头到山东安丘的物流
济南的千佛山、趵突泉、大名湖门票多少
北海公园其中名景的由来或说道!例如五龙亭!
四川成都小吃车哪家的性价比高
从邹区灯具城到恐龙园有直达的客车不?
东营到哈尔滨路过哪些地方
福州到重庆多少航程
从北京站到万龙八易怎么走??
在列车火车上认识一个女孩,回来后约了两次没约出来
为什么山东鄄城连公交车都没有
我想预定2012.1.1的列车火车票广东到重庆K776
青岛火车站到市北区大港纬四路3号坐什么公交车
公司的办事能力越来越没有信心了 发过快递5.6天还没收到

Copyright © 2016 phpStudy |