有关android SD卡操作中,遍历是最简单且最基础常用的操作。
下面就来实现遍历sd卡中所有文件,并且用一个ListView显示出来。
首先,了解一下ListView的用法。
android document中的解释:
A view that shows items in a vertically scrolling list. The items come from the ListAdapter
associated with this view.
也就是说 listview是将一个ListAdapter的内容用图像显示出来,
所以我们可以用一个SimpleAdapter来保存SD卡遍历的结果。
而我们知道linux文件系统是一颗单独的树(没有森林)。所以从根目录进行一次深搜就能访问所有节点。
而android SD卡的根目录为"/sdcard"。
调用getAllFiles(new File("/sdcard"))后所有文件保存在list中。
下面就是在将数据保存到SimpleAdapter中了。
查阅android document 其构造函数为:
public SimpleAdapter
(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
其中
context为 显示listView的activity,
data为 数据,
resource为 listview中每一格单元格的布局xml的位置(res/layout/relative.xml,自己创建)
from 为listview中每一个item中组件(如一个item中含有2个textview--textview1,textview2)所对应的数据源。
to 为 form的数据源对应的item中组件的名称(textview1,textview2)。
所以需要将刚才得到的list数据转化成 List<? extends Map<String, ?>>类型
以下为转化函数
最后 通过listView 显示 方法为
listView的布局定义在main.xml中
listview中单元格的布局定义在relative.xml中
以下是运行效果(读取的sd卡为模拟器中的SD卡,在真机上运行,文件太多,会花费几秒钟时间读取,可以将上述递归遍历改进):
模拟SD卡 内容 请看我另一篇文章。
以下是所有代码(可运行):
AndroidMainfest.xml中一定要加上
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//testSD.java
res/layout/main.xml
res/layout/relative.xml