Android使用文件进行数据存储的方法
本文实例讲述了android使用文件进行数据存储的方法。分享给大家供大家参考。具体如下:
很多时候我们开发的软件需要对处理后的数据进行存储,以供再次访问。android为数据存储提供了如下几种方式:
文件
sharedpreferences(参数)
sqlite数据库
内容提供者(content provider)
网络
首先给大家介绍使用文件如何对数据进行存储
activity提供了openfileoutput()方法可以用于把数据输出到文件中,具体的实现过程与在j2se环境中保存数据到文件中是一样的
public class fileactivity extends activity { @override public void oncreate(bundle savedinstancestate) { fileoutputstream outstream = this.openfileoutput("ljq.txt", context.mode_private); outstream.write("我叫林计钦".getbytes()); outstream.close(); } }
openfileoutput(filename, mode)方法详解:
第一参数:
用于指定文件名称,不能包含路径分隔符“/”。如果文件不存在,android 会自动创建它。创建的文件保存在/data/data/<packagename>/files目录,如:/data/data/com.ljq.activity/files/itcast.txt ,通过点击myeclipse菜单“window”-“show view”-“other”,
在对话窗口中展开android文件夹,选择下面的file explorer视图,然后在file explorer视图中展开/data/data/<package name>/files目录就可以看到该文件
第二参数:
用于指定操作模式,有四种模式
context.mode_private = 0
默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。
可以使用context.mode_append。
context.mode_append = 32768
检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
context.mode_world_readable = 1
表示当前文件可以被其他应用读取
context.mode_world_writeable = 2
表示当前文件可以被其他应用写入
注意:
context.mode_world_readable和context.mode_world_writeable用来控制其他应用是否有权限读写该文件。
如果希望文件被其他应用读和写,可以传入: openfileoutput("ljq.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("ljq.txt");
或者直接使用文件的绝对路径:
file file = new file("/data/data/com.ljq.action/files/ljq.txt");
fileinputstream instream = new fileinputstream(file);
注意:上面文件路径中的“com.ljq.action”为应用所在包,当你在编写代码时应替换为你自己应用使用的包。
对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,
指定context.mode_world_readable和context.mode_world_writeable权限。
activity还提供了getcachedir()和getfilesdir()方法:
getcachedir()方法用于获取/data/data/<package name>/cache目录
getfilesdir()方法用于获取/data/data/<package name>/files目录
案例
fileservice类:文件存取操作类
package com.ljq.service; import java.io.bytearrayoutputstream; import java.io.inputstream; import java.io.outputstream; public class fileservice { /** * 保存数据 * * @param outputstream * @param content * @throws exception */ public static void save(outputstream outputstream, string content) throws exception { outputstream.write(content.getbytes()); outputstream.close(); } /** * 读取数据 * * @param inputstream * @return * @throws exception */ public static string read(inputstream inputstream) throws exception { // 往内存写数据 bytearrayoutputstream bytearrayoutputstream = new bytearrayoutputstream(); // 缓冲区 byte[] buffer = new byte[1024]; int len = -1; while ((len = inputstream.read(buffer)) != -1) { bytearrayoutputstream.write(buffer, 0, len); } // 存储数据 byte[] data = bytearrayoutputstream.tobytearray(); bytearrayoutputstream.close(); inputstream.close(); return new string(data); } }
fileservicetest测试类:
package com.ljq.service; import java.io.inputstream; import java.io.outputstream; import android.content.context; import android.test.androidtestcase; import android.util.log; /** * android测试 * * @author jiqinlin * */ public class fileservicetest extends androidtestcase { private final string tag = "fileservicetest"; public void testsave() throws exception{ outputstream outputstream = this.getcontext().openfileoutput("ljq.txt", context.mode_private); fileservice.save(outputstream, "abc"); } public void testread() throws exception{ inputstream inputstream= this.getcontext().openfileinput("ljq.txt"); string content = fileservice.read(inputstream); log.i(tag, content); } }
清单文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ljq.activity" android:versioncode="1" android:versionname="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="android.test.runner" /> <activity android:name=".fileactivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> <uses-sdk android:minsdkversion="7" /> <instrumentation android:name="android.test.instrumentationtestrunner" android:targetpackage="com.ljq.activity" android:label="tests for my app" /> </manifest>
希望本文所述对大家的android程序设计有所帮助。
上一篇: 蛋白质消化情况怎么样
推荐阅读
-
php使用指定编码导出mysql数据到csv文件的方法
-
Android 入门第十讲02-广播(广播概述,使用方法(系统广播,自定义广播,两个activity之间的交互和传值),EventBus使用方法,数据传递,线程切换,Android的系统广播大全)
-
php+mysqli使用预处理技术进行数据库查询的方法,mysqli预处理_PHP教程
-
Android编程实现使用webView打开本地html文件的方法
-
Android编程使用内容提供者方式(ContentProvider)进行存储的方法
-
Android编程使用ListView实现数据列表显示的方法
-
Android编程使用HTTP协议与TCP协议实现上传文件的方法
-
Android中使用SQLite3 命令行查看内嵌数据库的方法
-
Android编程之include文件的使用方法
-
使用Python进行二进制文件读写的简单方法(推荐)