本章内容,主要侧重于讲解一下递归遍历的思想,可能代码不全,需要大家自己完成。
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在此先谢过各位大虾。