您的位置:首页 > 移动开发 > Android开发

Android开发之如何读写文件

2012-12-27 11:24 519 查看
这一节将给大家介绍在Android中如何用文件进行数据的存取.

首先介绍如何存储数据,显然,要将数据从应用中输出到文件中,必须得到一个输出流outPutStream,然后往输出流中写入数据,在这里Android自带了一个得到应用输出流的方法

FileOutputStream fos
=context.openFileOutput(“yuchao.txt”,Context.MODE_PRIVATE);
 (1)


其中第一个属性为文件名,第二个属性为读写模式(有关读写模式的说明下面将详细阐述),

然后在文件输出流fos中便可以写入数据

Fos.write(“Hi,”I’m Chao
Yu!”.getBytes())
;

用完文件输出流之后记得关闭

fos.close();

这样,在/data/data/packageName/file目录下就生成了一个文件名为yuchao.txt的文件,文件中的内容为” Hi,I’m Chao Yu!”

有关(1)中读写模式其实就是制定创建文件的权限以及在读写的时候的方式,Android中提供了以下几种读写模式

Context.MODE_PRIVATE   
=  0

该模式下创建的文件其他应用无权访问,并且本应用将覆盖原有的内容

Context.MODE_APPEND   
=  32768

该模式下创建的文件其他应用无权访问,并且本应用将在原有的内容后面追加内容

Context.MODE_WORLD_READABLE
=  1

该模式下创建的文件其他应用有读的权限

Context.MODE_WORLD_WRITEABLE
=  2

该模式下创建的文件其他应用有写的权限

如果需要将文件设置为外部应用可以读写,可将读写模式设置为Context.MODE_WORLD_READABLE +
Context.MODE_WORLD_WRITEABLE

一般情况下,各个应用维护的数据都在一个特定的文件夹中,即上面所提到的/data/data/packageName/file(存在于手机存储中),但手机内存毕竟有限,所以有些情况下,我们需要往SD卡中写入数据文件,这其实和普通的java web
应用步骤一样,都是先创建特针对特定目录特定文件的输出流,然后往输出流中写数据,这里要注意一个方法,就是获取SD卡根目录的方法,随着Android系统不断升级,SD卡的根目录随时都有可能改变,Android中得到SD卡根目录的方法是

File sdCardDir =
Environment.getExternalStorageDirectory();


然后就可以进行下面的步骤

File saveFile = new
File(sdCardDir, “yuchao.txt”);


FileOutputStream
outStream = new FileOutputStream(saveFile);


outStream.write("Hi,I’m
ChaoYu".getBytes());


outStream.close();

值得注意的是,在往SD卡中写数据的时候,健壮的代码必须考虑SD卡不存在或者写保护的情况,故在写入之前,先做判断

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

……

}

接着,我们来学习下我们的应用程序如何读取文件中的数据,其实就是写的逆向过程

若要读取应用程序默认维护的文件(即/data/data/packageName/file目录下的文件),首先得到文件输入流

FileInputStream istream =
this.context.openFileInput(“yuchao.txt”);


然后在内存中开辟一段缓冲区

byte[] buffer = new
byte[1024];


然后创建一个字节数组输出流

ByteArrayOutputStream
ostream = new ByteArrayOutputStream();


读出来的数据首先放入缓冲区,满了之后再写到字符输出流中

while((len=istream.read(buffer))!=-1){

                           
ostream.write(buffer, 0, len);


                  
}


最后关闭输入流和输出流

istream.close();

ostream.close();

将得到的内容以字符串的形式返回便得到了文件中的内容了,这里的流操作较多,故以一张图片来说明,见图1

 




图1 

return new
String(ostream.toByteArray());


从SD卡中读取数据与上述两个步骤类似,故不再赘述,留给读者自己思考

如在开发过程中进行SD卡地读写,切忌忘了加入权限

 

<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
/>


<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


至此,Android系统中有关文件数据的读写介绍完毕。

源代码保存在
https://geakit.com/yuchao/androidDemos/tree/master/File/src/com/yuchao
可在线浏览,欢迎fork
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: