本篇文章给大家分享的是有关Android在代码中如何使用SD卡,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1 SD 是否可用检查
有两种方式,一种是写一个监听函数,用来监听
private final BroadcastReceiver broadcastRec = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.intent.action.MEDIA_MOUNTED")) { //SD 卡已经成功挂载 //有SD 卡 } else if (intent.getAction().equals("android.intent.action.MEDIA_REMOVED") || intent.getAction().equals("android.intent.action.ACTION_MEDIA_UNMOUNTED") || intent.getAction().equals("android.intent.action.ACTION_MEDIA_BAD_REMOVAL")) {//各种未挂载状态 //无SD 卡 } } };
另一种在我看来,更简单一些:
File f = new File("/sdcard/"); f.exists();
2 卡上数据的读写
在动手之前,我们先来看看,要对SD 卡进行读写操作,Android 为我们准备了哪些类/接口。
接口:FileFilter
类:File、FileInputStream、FileOutputStream
下面我们依次对上面出场的做个简单的介绍吧,同时,也会给出若干代码来说明各个类如何使用
3 File
文件系统的一个抽象描述类,可以使用相对路径和绝对路径,该类提供了若干方法查询/修改文件信息
File file = new File("/sdcard/a.txt");
判断文件是否存在:
file.exists()
“文件”是目录还是文件
file.isDirectory()
如果文件为目录,如何列出子目录呢?
File[ ] filefiles = file.listFiles();
对于文件,如果获得文件的一些信息
file.length(); //文件的长度 file.canRead(); //文件可以读吗 file.canWrite(); //文件可以写吗 file.delete(); //删除该文件
下面,给出一些片断代码来展示如何使用File 类
//创建一个新文件 File file = new File("/sdcard/a.txt"); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } //创建一个新文件夹 File file = new File("/sdcard/a/b/c"); if (!file.exists()) { try { file.mkdirs(); }
请注意,mkdirs()和mkdir()的用法,mkdirs()表示,如果需要,会先创建上层目录,如上述代码中,如果SD 卡根目录不存在目录a,那么,使用mkdir()会抛出异常。
4 FileFilter
我们知道,listFiles()会列出当前目录下的文件,但是,另一个问题出来了,如果当前目录下文件杂乱无部分,而我们又不想列出所有文件,怎么办?FileFilter 提供了一个解决方法。我们只需要实现public abstract boolean accept(File pathname)接口就可以了。
FileFilter filter = new FileFilter() { public boolean accept (File file) { if (file.isFile() && file.getAbsolutePath().toLowerCase().endsWith(".txt")) { return true; } return false; } }; File[] filefiles = file.listFiles(filter);
以上代码展示了如何只列出当前目录下的TXT 文件。
5 FileInputStream
我们不仅需要对文件进行操作,还需要对文件的内容进行操作,这时候,FileInputStream 就登场了
FileInputStream 继承自InputStream,但是FileInputStream 使用了缓冲,以提高频繁读入数据时的性能。
使用FileInputStream 也很简单
FileInputStream fis = new FileInputStream("/sdcard/a.txt"); byte[ ] abytes = new byte[1024] int len = fis.read(abytes);
在上述代码中,我们打开了SD 卡根目录下的a.txt 文件,同时,读入1K 的数据,需要注意的是,read 并不能保
证一定读入期望长度的数据,我们需要对读入数据的长度进行检查。
6 FileOutputStream
FileOutputStream 与OutputStream 的用法差不多,在些也不多说,给出一个代码吧: FileOutputStream fos = new FileOutputStream("/sdcard/a.txt"); fos.write("Hello World!".getBytes()); fos.flush();
上述代码会向a.txt 中写入Hello World 字符,请注意,FileOutputStream 也使用了缓冲,因此,数据不会立即写入文件中,当系统认为需要写回数据的时候,真正的写回才发生,因此,如果为了让数据立即写回,需要使用flush()方法。
也许你会问到,我不想把文件原有的内容抹到,怎么?这个也简单,
FileOutputStream fos = new FileOutputStream("/sdcard/a.txt", true);
true 表示向文件后面追加数据
以上就是Android在代码中如何使用SD卡,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。