Android的文件操作
Android的文件操作
一、Android的文件操作简介
要理解Android的文件存储,首先要明白Android是如何用什么方式获取和存入数据的。Android的文件操作都是通过流的方式进行的,即IO。Android的文件操作跟Java是一样的,文件操作分为输入流(InputStream)和输出流(OutputStream),输入流用于获取文件数据,输出流用于存储文件。输入流和输出流都是很耗费内存空间的,所以在使用Android的IO时,除非特殊需要,一般在使用结束后要记得关闭IO通道。接下来我们就来讲解一下,InputStream和OutputStream。
1、InputStream
InputStream是一个抽象类,其表示字节输入流的所有类的超类。以下是InputStream经常会使用的一些方法。
void | close() |
abstractint | read() |
int | read(byte[]b) |
int | read(byte[]b,intoff,intlen) |
其中close方法需要特别注意,要记得及时调用close方法关闭输入流。
2、OutputStream
OutputStream是一个抽象类,其表示字节输出流的所有类的超类。以下是OutputStream经常会使用的一些方法。
void | close() |
void | write(byte[]b) |
void | write(byte[]b,intoff,intlen) |
abstractvoid | write(intb) |
跟InputStream一样,要记得及时调用close方法关闭输出流。
二、InputStream和OutputStream的获取和使用。
1、操作Android的SD卡的文件
例如在Android中,需要往android手机的自带内存(非SD卡)中读写文件。
Activity的父类Context有方法可以获取输出和写入流。
分别是:
openFileOutput(name,mode);
openFileInput(name);
mode有
Context.MODE_PRIVATE;//默认,仅此程序私有
Context.MODE_APPEND;//追加方式
Context.MODE_WORLD_READABLE;//(其它程序)可读
Context.MODE_WORLD_WRITEABLE;//(其它程序)可写
注:SD卡IO需要权限:
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.WRITE_EXTERNAL_STORAGE
2、使用FileInputStream获取文件
在1中我们谈到可以用openFileOutput(name,mode)和openFileInput(name)分别获取输出流和数据输入流,原Java中提供了FileInputStream和FileOutputStream类,分别继承于InputStream和OutputStream,在Android通过这个两个类也是可以获取输入流和输出流的。
1、FileInputStream的使用方法
以下是FileInputStream的构造方法
FileInputStream(Filefile) |
FileInputStream(FileDescriptorfdObj) |
FileInputStream(Stringname) |
相应代码:
//newFilename为文件地址InputStream is= new FileInputStream(newFilename);
2、FileOutputStream的使用方法
以下是FileOutputStream的构造方法
FileOutputStream(Filefile) |
FileOutputStream(Filefile,booleanappend) |
FileOutputStream(FileDescriptorfdObj) |
FileOutputStream(Stringname) |
FileOutputStream(Stringname,booleanappend) |
相应代码:
// newFilename为要生成的文件地址OutputStream os = new FileOutputStream(newFilename);
注:同样需要权限:
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.WRITE_EXTERNAL_STORAGE
3、获取Android的Assets文件夹的数据
在Android中,有时候你不只需要在sd卡中获取文件,只需要从Assets中获取文件。那代码上可以如此处理。
InputStreamis=context.getResources().getAssets().open(mfileName);
三、代码示例
1、从resource的asset中读取文件数据
String fileName = "test.txt"; //文件名字String res="";try{ //得到资源中的asset数据流 InputStream in = getResources().getAssets().open(fileName); int length = in.available(); byte [] buffer = new byte[length]; in.read(buffer); res = EncodingUtils.getString(buffer, "UTF-8"); }catch(Exception e){ e.printStackTrace(); }
2、读写SD卡中的文件。也就是/mnt/sdcard/目录下面的文件:
//写数据到SD中的文件public void writeFileSdcardFile(String fileName,String write_str){ try{ FileOutputStream fout = new FileOutputStream(fileName); byte [] bytes = write_str.getBytes(); fout.write(bytes); fout.close(); } catch(Exception e){ e.printStackTrace(); } } //读SD中的文件public String readFileSdcardFile(String fileName){ String res=""; try{ FileInputStream fin = new FileInputStream(fileName); int length = fin.available(); byte [] buffer = new byte[length]; fin.read(buffer); res = EncodingUtils.getString(buffer, "UTF-8"); fin.close(); } catch(Exception e){ e.printStackTrace(); } return res;}
以上内容部分参考网络上的博文,附带上一个小demo。
http://download.csdn.net/detail/stop_pig/7896851
更多相关文章
- Android基础笔记(四)-数据存储和界面展现
- Android studio学习之TextView、EditText、Button、ImageView、S
- 如何安装apk文件在Android仿真器中
- Android中数据存储的5种方法
- 【Android 清单文件下的 Activity各种配置详解】
- Android下载文件(一)下载进度&断点续传
- 创建android文件系统(Root file system)
- Android数据加密之Des加密