android数据存储的四种方案(二)
2016-02-06 20:39
351 查看
文件流操作
二.openFileOutput和openFileInput
openFileOutput : 打开要写入的文件,返回一个OutputStream对象
openFileInput:打开要读取的文件,返回一个InputStream对象
这两个Stream对象的创建过程类似于SharedPreferences对象的初始化过程:
区别只是第一个参数多了一个扩展名
无论是SharedPreferences还是今天说的这两个,他们在初始化时都是仅仅指定了文件名,而不是文件路径,所以,他们只能将文件保存到固定的路径对于OutputStream和InputStream将文件保存在DDMS里的File explore的data/data//files目录,SharedPreferences将文件保存在data/data//shared_prefs中.
具体来看一个小例子:
注:虽然openFileOutput,openFileInput方法可以获得outputStream以及InputStream对象,且可以通过流对象人已处理数据,但是跟SharedPreferences一样只能在手机内存卡的指定目录存储数据,都存在局限性,所以接下来看一种更高级的读写SD卡的方法
读取SD卡中的文件
FileOutputStream和FileInputStream用来读取指定路径的文件
这里直接上代码吧,这次是将android工程里的assets目录里的text.png
图片存入SD卡,点击按钮后再从SD卡中取出该图片并设置给ImageView
注:我们一般获取SD卡路径除了用andorid.os.Enviroment.getExternalStorageDirectory方法,还可以直接使用“/sdcard”,但是建议使用前者,这样一旦系统改变了路径,应用程序会立刻获得最新的路径,使程序更健壮
最后还需要加权限
二.openFileOutput和openFileInput
openFileOutput : 打开要写入的文件,返回一个OutputStream对象
openFileInput:打开要读取的文件,返回一个InputStream对象
这两个Stream对象的创建过程类似于SharedPreferences对象的初始化过程:
OutputStream os = openFileOutput("file.txt",Activity.MODE_PRIVATE); InputStream is = openFileInput("file.txt");
区别只是第一个参数多了一个扩展名
无论是SharedPreferences还是今天说的这两个,他们在初始化时都是仅仅指定了文件名,而不是文件路径,所以,他们只能将文件保存到固定的路径对于OutputStream和InputStream将文件保存在DDMS里的File explore的data/data//files目录,SharedPreferences将文件保存在data/data//shared_prefs中.
具体来看一个小例子:
public void onClick(){ try { //打开要写入的文件 OutputStream os = openFileOutput("file.txt", Activity.MODE_PRIVATE); String str = "中国万岁"; //将要写入的字符串转化为字节写入 os.write(str.getBytes("utf-8")); os.close(); //打开要读取的文件夹 InputStream is = openFileInput("file.txt"); byte [] buffer = new byte[128]; int byteCount = is.read(buffer); //将读取到的字节转化为字符串 String str1 = new String(buffer, 0, byteCount, "utf-8"); Toast.makeText(getApplicationContext(), str1, 2).show(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
注:虽然openFileOutput,openFileInput方法可以获得outputStream以及InputStream对象,且可以通过流对象人已处理数据,但是跟SharedPreferences一样只能在手机内存卡的指定目录存储数据,都存在局限性,所以接下来看一种更高级的读写SD卡的方法
读取SD卡中的文件
FileOutputStream和FileInputStream用来读取指定路径的文件
这里直接上代码吧,这次是将android工程里的assets目录里的text.png
图片存入SD卡,点击按钮后再从SD卡中取出该图片并设置给ImageView
try{ //创建FileOutputStream对象用于将文件写入SD卡 FileOutputStream fos = new FileOutputStream(android.os.Environment.getExternalStorageDirectory() + "/picture.png"); //读取assetc目录中的图片返回一个InputStream对象 InputStream is = getResources().getAssets().open("text.png"); //一次写8k byte[] buffer = new byte[8192]; int count = 0; while((count = is.read(buffer)) >= 0){ fos.write(buffer, 0, count); } //刷新流 fos.flush(); //关闭流 fos.close(); is.close(); //至此图片已经存入SD卡 }catch(Exception e){ e.printStackTrace(); }
public void onClick(View view){ //指定读取位置 String fileName = android.os.Environment.getExternalStorageDirectory() + "/picture.png"; try { //判断图片是否存在 if(!new File(fileName).exists()){ Toast.makeText(getApplicationContext(), "找不到数据", 1).show(); return; } //获取fis对象用来读取SD卡中的数据(这里是图片) FileInputStream fis = new FileInputStream(fileName); imageView = (ImageView)findViewById(R.id.imageView1); //利用图片工厂获取图片 Bitmap bitmap = BitmapFactory.decodeStream(fis); imageView.setImageBitmap(bitmap); fis.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
注:我们一般获取SD卡路径除了用andorid.os.Enviroment.getExternalStorageDirectory方法,还可以直接使用“/sdcard”,但是建议使用前者,这样一旦系统改变了路径,应用程序会立刻获得最新的路径,使程序更健壮
最后还需要加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
相关文章推荐
- android dialog类详解
- Android_Mars学习笔记_S01_001activity初步
- android上的简单hook
- Android Learning:多线程与异步消息处理机制
- android日常开发60条经验
- 王学岗高级控件滚动视图(一)
- android数据存储的四种方案(一)
- ubuntu14.04中搭建qt for android环境
- Android中Nine-Patch(.9)图片介绍与制作
- Android使用序列化接口Parcelable、Serializable
- Android 内核常见目录的作用
- Android 内核常见目录的作用
- Android 内核常见目录的作用
- Android 内核常见目录的作用
- Android 实战之: 去除安卓应用启动前闪烁的黑屏或白屏效果
- 安卓开发——获取Android数字签名证书的SHA1值
- android项目 之 记事本(12) ----- 图片的等比例缩放及给图片加入边框
- Android 推断当前Activity是不是最后一个Activity 以及 应用或Activity是否存在
- android经常使用的电话操作
- Android 性能优化 三 布局优化ViewStub标签的使用