传智播客学习之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:表示当前文件可以被其他应用写入。
如果我们希望有更多的权限,可以通过加入多个,以逗号分开。
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:表示当前文件可以被其他应用写入。
如果我们希望有更多的权限,可以通过加入多个,以逗号分开。
相关文章推荐
- IOS 学习笔记 2015-04-09 0C-SQLite 数据存储
- android学习记录3(数据存储的方式:sqlite、sp、存文件。listview简单使用)
- Android网络与数据存储_学习笔记_第六周:SQLite与ContentProvider
- Android数据存储之SQLite 数据库学习
- android学习日记13--数据存储之SQLite
- 传智播客—Android(三)数据存储之三SQLite嵌入式数据库
- 2010-02-28 传智播客—Android(三)数据存储之三SQLite嵌入式数据库
- 《第一行代码》第二版 学习总结14 数据持久化之SQLite存储
- 【Android】数据存储数据库SQLite(之前有看到的一篇关于SQLite文章,简单明了、覆盖较全面适合学习)
- android学习---SQLite方式存储数据
- Android 数据持久化(SQLite数据存储)
- android学习—数据存储和IO-SharedPreference和Editor
- 关于sqlite断电或者存储空间不足造成的数据文件损坏问题-转
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式
- 好东西!sqlite3中BLOB数据类型存储大对象运用示例
- Android学习17--Android的数据存储和IO
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览
- 一个小时内学习 SQLite 数据库
- Android开发学习笔记:数据存取之SQLite浅析
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite