Android的文件操作

一、Android的文件操作简介

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

1InputStream

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

void

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

abstractint

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

int

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

int

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

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

2OutputStream

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

void

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

void

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

void

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

abstractvoid

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

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

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

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

相应代码:

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

2、FileOutputStream的使用方法

以下是FileOutputStream的构造方法

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

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

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

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

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

相应代码:

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


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

3、获取AndroidAssets文件夹的数据

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

InputStreamis=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

更多相关文章

  1. Android基础笔记(四)-数据存储和界面展现
  2. Android studio学习之TextView、EditText、Button、ImageView、S
  3. 如何安装apk文件在Android仿真器中
  4. Android中数据存储的5种方法
  5. 【Android 清单文件下的 Activity各种配置详解】
  6. Android下载文件(一)下载进度&断点续传
  7. 创建android文件系统(Root file system)
  8. Android数据加密之Des加密

随机推荐

  1. Sources for Android(安卓)API 23 Platfr
  2. Android利用NotificationListenerService
  3. Recycler的一些笔记
  4. Android(安卓)Studio开发之ndk报错--erro
  5. Android—Room数据库多表查询(Relationsh
  6. 国内外知名Android开发者GitHub、Blog
  7. Android分析之LowMemoryKiller
  8. Android Binder入门指南之Binder服务的消
  9. UnityAndroid开发(1) 打包和使用Sqlite数
  10. 调用Android自带浏览器打开网页