标题: 递归确实好强大~~
作者: 春风沉醉的晚上 @Ta
时间: 2013-02-22
以前都是听书上说递归是秘密武器,今天终于体会到了。
突然想知道一下电脑里有多少首歌,就把以前写的(根据所输路径,打印该路径下的文件(夹))的程序找出来,直接继承继续写。也就是说此时的程序已经具备保存当前目录中所有的文件和文件夹到数组的功能了 (不包括子文件夹中的任何东西,读取子文件夹中的歌曲就是本文的重点嘛) 下面代码中的files就是所指的数组变量。
这样的话,先判断是文件还是文件夹。如果是文件的话,就再判断是不是歌曲,是的话,就存进集合filesNameOnly里;如果是文件夹的话,就。。。已经写到这里了,突然就卡住了,因为文件夹里可能还有文件夹,这是无底洞呀……
然后我看了下这个方法的参数,没错,就是File[ ]类型的,读取上面的文件夹里的内容(文件和文件夹),居然完全可以调用自身,而且几乎filesNameOnly是实例域,不会在接下来的方法中清零的。最后我还检查了两点:1.是不是每递归一次,任务(文件夹数)就少一点;2.当最后文件夹检查完后,能不能正常退出递归。没学到两样都正好满足了。
哈哈,好吧水到渠成了……下面是递归部分的实现部分(主要变量上面都有提到的)。太开心了,所以可能有点模仿大神的意思,见谅见谅~~
public void getMusics(File[] files){
// The powerful recursion!!!
if(files != null ){
for(File file : files){
if(file.isFile( ))
if(checkIsMusic(file))
filesNamesOnly .add(file );
if(file.isDirectory( )){
getMusics(file.listFiles( ));
}
}
}
}
[隐藏样式|查看源码]