Android的文件操作

Android的文件操作

一、Android的文件操作简介

要理解Android的文件存储,首先要明白Android是如何用什么方式获取和存入数据的。Android的文件操作都是通过流的方式进行的,即IOAndroid的文件操作跟Java是一样的,文件操作分为输入流(InputStream)和输出流(OutputStream),输入流用于获取文件数据,输出流用于存储文件。输入流和输出流都是很耗费内存空间的,所以在使用AndroidIO时,除非特殊需要,一般在使用结束后要记得关闭IO通道。接下来我们就来讲解一下,InputStream和OutputStream。

1InputStream

InputStream是一个抽象类,其表示字节输入流的所有类的超类。以下是InputStream经常会使用的一些方法。

 void

close() 
          关闭此输入流并释放与该流关联的所有系统资源。

abstract  int

read() 
          从输入流读取下一个数据字节。

 int

read(byte[] b) 
          从输入流中读取一定数量的字节并将其存储在缓冲区数组 中。

 int

read(byte[] b, int off, int len) 
          将输入流中最多 len 个数据字节读入字节数组。

 

其中close方法需要特别注意,要记得及时调用close方法关闭输入流。

2OutputStream

OutputStream是一个抽象类,其表示字节输出流的所有类的超类。以下是OutputStream经常会使用的一些方法。

 void

close() 
          关闭此输出流并释放与此流有关的所有系统资源。

 void

write(byte[] b) 
          将 b.length 个字节从指定的字节数组写入此输出流。

 void

write(byte[] b, int off, int len) 
          将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。

abstract  void

write(int b) 
          将指定的字节写入此输出流。

 

跟InputStream一样,要记得及时调用close方法关闭输出流。

二、InputStream和OutputStream的获取和使用。

1、操作AndroidSD卡的文件

例如在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;  //(其它程序)可写

注:SDIO需要权限:
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(File file) 
          通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

FileInputStream(FileDescriptor fdObj) 
          通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。

FileInputStream(String name) 
          通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

相应代码:

//newFilename为文件地址
InputStream is= new FileInputStream(newFilename);

2、FileOutputStream的使用方法

以下是FileOutputStream的构造方法

FileOutputStream(File file) 
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

FileOutputStream(File file, boolean append) 
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

FileOutputStream(FileDescriptor fdObj) 
          创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。

FileOutputStream(String name) 
          创建一个向具有指定名称的文件中写入数据的输出文件流。

FileOutputStream(String name, boolean append) 
          创建一个向具有指定 name 的文件中写入数据的输出文件流。

 

相应代码:

// newFilename为要生成的文件地址
OutputStream os = new FileOutputStream(newFilename);


注:同样需要权限
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.WRITE_EXTERNAL_STORAGE

3、获取AndroidAssets文件夹的数据

在Android中,有时候你不只需要在sd卡中获取文件,只需要从Assets中获取文件。那代码上可以如此处理。

InputStream is = context.getResources().getAssets().open(mfileName);

 

三、代码示例

 1resourceasset中读取文件数据

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值