本章内容,主要侧重于讲解一下递归遍历的思想,可能代码不全,需要大家自己完成。
1.以SDcard文件资源的递归遍历为例子讲解思路。
首先要明白,SDcard递归遍历要用到一个文件File路径,几乎全部的路径,都是从根目录rootPath逐级获取到的。那么,rootPath显得尤为重要。
File
注意,返回值本身就是File类型的,所以做ListView操作的时候,没有必要转换成String类型的,来显示文件列表。因为,ListView一般设置适配器SimpleAdapter,需要的5个参数(Context,list<Map<String,X>)data,int
2.递归遍历,目的就是找出我们所需要的文件资源。
(1)显示SDcard上各级文件夹和文件目录
第一次遍历,我们肯定是首先要根据rootPath路径,显示出根目录下的文件夹和文件列表。那我们做的工作就是,找出要显示的这个list列表,里面存储着文件夹和文件。那么我们怎么找呢?
实例代码:2-1
if
for
Map<String,
if
map.put("img",
else
map.put("img", }
map.put("fname", lst.add(map); } }
return 找出了数据源list,然后设置适配器,显示即可。
|
这就是显示出了递归遍历的伟大之处~~~
看思路: 首先,给listview添加点击事件。然后,进行判断,如果是目录,那么进行递归遍历;如果是文件,给出提示。 实例代码2-2
lv1.setOnItemClickListener(new @Override
public
int
File
if //此处执行代码2-1
}
Toast.makeText(MyFileExplorerActivity.this, Toast.LENGTH_SHORT).show(); } });
(2)用递归遍历的方法,删除指定的文件夹及子目录所有的文件。 |
要程序要删除SDcard上面的一个文件夹及其子目录的全部文件,大家首先要明白:你如果直接file.delete的话,是删不掉的。必须要先把子目录中的文件和文件夹删除掉,最后删除该文件夹。
实例代码2-3
1
2 if 3 //先删除子文件夹和文件
4 File[] 5 if(files!=null){
6 for 7 deleteDirectorys(ff); 8 } 9 } 10 } 11 //最后,删除该文件夹或文件
12 13 } |
程序中,是传入了某个File对象,就是指定要删除的文件夹或者文件。重点是第6、7行。比如,指定一个目录:music-->mp3-->love.mp3/song.mp3
执行过程:
==1次==
==2次==
从执行过程中,个人总结出某些规律:
这2条规律刚看出来,不知道结论是否永远为true,大家可以再举几个例子再验证一下~~哈哈
(3)用递归遍历的方法,显示某个文件夹及各级子目录下的全部文件。
既然要显示出全部的文件,那么只需要用递归遍历找出file.isFile()为真的File,然后添加到list中显示即可。可见具体代码:
实例代码:2-4
private
File[]
if
for
if checkFile(f); }
else
} } }
return } |
具体的执行推演过程,大家如果觉得脑子有点乱的话,建议找只笔推演下执行的过程,这样会比较容易理些。如有错误之处,还请大家在评论中给与指出~~Devil在此先谢过各位大虾。