您的位置:首页 > 数据库

传智播客学习之SQLite数据存储

2010-03-20 22:56 267 查看
很多时候我们的软件需要对处理后的数据进行存储或再次访问。Android为数据存储提供了多种方式,分别有如下几种:
l 文件:存储到设备内部或可移动闪存
l SharedPreferences:快速,轻量级存储
l SQLite数据库:任意的机构化存储
l 内容提供者(Content provider)
l 网络:支持基于网络的存储
一、使用文件进行存储
可以直接在移动设备或可移动存储媒介里存放文件。缺省情况下,其它应用程序不能访问这些文件。为了从文件中读取数据,可调用Context.openFileInput()方法并传递本地文件名和文 件路径给它。该方法返回一个标准的Java FileInputStream 对象。为了写一个文件,可调用Context.openFileOutput()并传递文件名和路径,这个方法也返回FileOutputStream对象。从另外的应用程序中调用这些方法将不起作用,你只能访问本地文件。
如果你有一个静态文件需要在编译时打包进应用程序,你可以保存该文件在你项目中res/raw/myDataFile,然后使用Resources.openRawResource (R.raw.myDataFile)打开它。该方法返回一个InputStream对象,你可以使用它读取文件数据。
Eg:1)存储文件
public void save(String content) throws Exception {
FileOutputStream out = context.openFileOutput("file.txt",
Context.MODE_PRIVATE);
out.write(content.getBytes());
out.close();
}
2)存储到SD卡上
public void save2SD(String content) throws Exception {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File file = new File(Environment.getExternalStorageDirectory(),
"fileonsd.txt");
FileOutputStream out = new FileOutputStream(file);
out.write(content.getBytes());
out.close();

}

}
3)读取
public String read() throws Throwable {
FileInputStream in = context.openFileInput("file.txt");
int len = 0;
byte[] buffer = new byte[1024];
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
while ((len = in.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
return new String(outStream.toByteArray());
}

注:openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录
二、使用SharedPreferences进行存储
它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。
1)写入代码:
SharedPreferences sharedPreferences = getSharedPreferences("itcast", Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();//获取编辑器
editor.putString("name", "传智播客");
editor.putInt("age", 4);
editor.commit();//提交修改
2)读取代码
SharedPreferences sharedPreferences = getSharedPreferences("itcast", Context.MODE_PRIVATE);
//getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 1);
三、其他存储
数据库存储和内容提供者将在后续和大家分享,而网络存储是指我们可以使用网络来存放和获取数据(当它可用时)。要进行网络操作,可使用java.net.*以及android.net.*中的类。

四、文件读写权限
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果我们希望有更多的权限,可以通过加入多个,以逗号分开。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: