Android在代码中如何使用SD卡

1SD是否可用检查

有两种方式,一种是写一个监听函数,用来监听

 
  1. privatefinalBroadcastReceiverbroadcastRec=newBroadcastReceiver(){
  2. @Override
  3. publicvoidonReceive(Contextcontext,Intentintent){
  4. if(intent.getAction().equals("android.intent.action.MEDIA_MOUNTED")){//SD卡已经成功挂载
  5. //有SD卡
  6. }elseif(intent.getAction().equals("android.intent.action.MEDIA_REMOVED")
  7. ||
  8. intent.getAction().equals("android.intent.action.ACTION_MEDIA_UNMOUNTED")
  9. ||
  10. intent.getAction().equals("android.intent.action.ACTION_MEDIA_BAD_REMOVAL")){//各种未挂载状态
  11. //无SD卡
  12. }
  13. }
  14. };

另一种在我看来,更简单一些:

 
  1. Filef=newFile("/sdcard/");
  2. f.exists();

2卡上数据的读写

在动手之前,我们先来看看,要对SD卡进行读写操作,Android为我们准备了哪些类/接口。

接口:FileFilter

:File、FileInputStream、FileOutputStream

下面我们依次对上面出场的做个简单的介绍吧,同时,也会给出若干代码来说明各个类如何使用

3File

文件系统的一个抽象描述类,可以使用相对路径和绝对路径,该类提供了若干方法查询/修改文件信息

 
  1. Filefile=newFile("/sdcard/a.txt");

判断文件是否存在:

 
  1. file.exists()

“文件”是目录还是文件

 
  1. file.isDirectory()

如果文件为目录,如何列出子目录呢?

 
  1. File[]filefiles=file.listFiles();

对于文件,如果获得文件的一些信息

 
  1. file.length();//文件的长度
  2. file.canRead();//文件可以读吗
  3. file.canWrite();//文件可以写吗
  4. file.delete();//删除该文件

下面,给出一些片断代码来展示如何使用File类

 
  1. //创建一个新文件
  2. Filefile=newFile("/sdcard/a.txt");
  3. if(!file.exists()){
  4. try{
  5. file.createNewFile();
  6. }catch(IOExceptione){
  7. e.printStackTrace();
  8. }}
  9. //创建一个新文件夹
  10. Filefile=newFile("/sdcard/a/b/c");
  11. if(!file.exists()){
  12. try{
  13. file.mkdirs();
  14. }

请注意,mkdirs()和mkdir()的用法,mkdirs()表示,如果需要,会先创建上层目录,如上述代码中,如果SD卡根目录不存在目录a,那么,使用mkdir()会抛出异常。

4FileFilter

我们知道,listFiles()会列出当前目录下的文件,但是,另一个问题出来了,如果当前目录下文件杂乱无部分,而我们又不想列出所有文件,怎么办?FileFilter提供了一个解决方法。我们只需要实现publicabstractbooleanaccept(Filepathname)接口就可以了。

 
  1. FileFilterfilter=newFileFilter(){
  2. publicbooleanaccept(Filefile){
  3. if(file.isFile()&&file.getAbsolutePath().toLowerCase().endsWith(".txt")){
  4. returntrue;
  5. }
  6. returnfalse;
  7. }
  8. };
  9. File[]filefiles=file.listFiles(filter);

以上代码展示了如何只列出当前目录下的TXT文件。

5FileInputStream

我们不仅需要对文件进行操作,还需要对文件的内容进行操作,这时候,FileInputStream就登场了

FileInputStream继承自InputStream,但是FileInputStream使用了缓冲,以提高频繁读入数据时的性能。

使用FileInputStream也很简单

 
  1. FileInputStreamfis=newFileInputStream("/sdcard/a.txt");
  2. byte[]abytes=newbyte[1024]
  3. intlen=fis.read(abytes);

在上述代码中,我们打开了SD卡根目录下的a.txt文件,同时,读入1K的数据,需要注意的是,read并不能保
证一定读入期望长度的数据,我们需要对读入数据的长度进行检查。

6FileOutputStream

 
  1. FileOutputStream与OutputStream的用法差不多,在些也不多说,给出一个代码吧:
  2. FileOutputStreamfos=newFileOutputStream("/sdcard/a.txt");
  3. fos.write("HelloWorld!".getBytes());
  4. fos.flush();

上述代码会向a.txt中写入HelloWorld字符,请注意,FileOutputStream也使用了缓冲,因此,数据不会立即写入文件中,当系统认为需要写回数据的时候,真正的写回才发生,因此,如果为了让数据立即写回,需要使用flush()方法。

也许你会问到,我不想把文件原有的内容抹到,怎么?这个也简单,

 
  1. FileOutputStreamfos=newFileOutputStream("/sdcard/a.txt",true);

true表示向文件后面追加数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值