android 数据持久化——读写SD卡中的内容

本文介绍了Android中如何实现数据持久化的高级方法,包括读写SD卡内容和使用SAX引擎解析XML文件。在SD卡读写部分,提到了需要特定权限,并展示了相关代码示例。在解析XML部分,详细解释了SAX技术的五个分析事件,通过DefaultHandler子类处理XML文件内容,将XML转换为Java对象。
摘要由CSDN通过智能技术生成

在前面讲的那三个方法:openFileOutput 、openFileInput 虽然都能通过流对象OutputStream和InputStream可以处理任意文件中的数据,但与 SharedPreferences 一样,只能在手机内存的指定目录下建立文件,因此,在实际的开发使用中有很大的局限性,那么在这一节中,我们来看一个比较高级的方法来实现数据的持久化——读写SD卡上的内容。


——读取assets目录中的文件

android中的文件夹assets存放的是二进制的文件格式,比如音频、视频、图片等,但该目录下的文件不会被R.java文件索引到,如果想读取该目录下的文件还需要借助AssetManager对象。

代码如下:

/**
	 * 将图片文件保存到SD卡的根目录下
	 * 
	 * 虽然确定SD卡的路径是可以直接使用"/sdcard"的,但在实际开发中建议使用:android.os.Environment.getExternalStorageDirectory()
	 * 方法获得SD卡的路径,这样一旦系统改变了路径,应用程序会立刻获得最新的SD卡的路径,这样做会使程序更健壮。
	 */
	public void writeToSD() {
		try {
			//创建用于将图片保存到SD卡上的FileOutputStream对象
			FileOutputStream fos = new FileOutputStream(android.os.Environment.getExternalStorageDirectory() + "/image.jpg");
			//打开assets目录下的image.jpg文件,并返回InputStream对象
			InputStream is = getResources().getAssets().open("image.jpg");
			//定义一个byte数组,用来保存每次向SD卡中文件写入的数据,最多8k
			byte[] buffer = new byte[8192];
			int count = 0;
			//循环写入数据
			while((count = is.read(buffer)) != -1)
			{
				fos.write(buffer, 0, count);
			}
			fos.close();
			is.close();
			Toast.makeText(this, "已成功将图片保存在SD卡中", Toast.LENGTH_SHORT).show();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 从SD卡中读取图片文件
	 * @throws IOException 
	 */
	public void readFromSD() throws IOException{
		//指定SD卡中的图像文件名
		String fileName = android.os.Environment.getExternalStorageState() + "image.jpg";
		//判断文件图片是否存在
		if (!new Fil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值