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

很多时候我们的软件需要对处理后的数据进行存储或再次访问。Android为数据存储提供了多种方式,分别有如下几种:

文件:存储到设备内部或可移动闪存

SharedPreferences:快速,轻量级存储

SQLite数据库:任意的机构化存储

内容提供者(Content provider

网络:支持基于网络的存储

一、使用文件进行存储

可以直接在移动设备或可移动存储媒介里存放文件。缺省情况下,其它应用程序不能访问这些文件。为了从文件中读取数据,可调用Context.openFileInput()方法并传递本地文件名和文 件路径给它。该方法返回一个标准的Java FileInputStream 对象。为了写一个文件,可调用Context.openFileOutput()并传递文件名和路径,这个方法也返回FileOutputStream对象。从另外的应用程序中调用这些方法将不起作用,你只能访问本地文件。

如果你有一个静态文件需要在编译时打包进应用程序,你可以保存该文件在你项目中res/raw/myDataFile,然后使用Resources.openRawResource (R.raw.myDataFile)打开它。该方法返回一个InputStream对象,你可以使用它读取文件数据。

Eg1)存储文件

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_READABLEContext.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

如果我们希望有更多的权限,可以通过加入多个,以逗号分开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值