黑马程序员技术交流社区

标题: 关于集合和File类的疑问,求助! [打印本页]

作者: 刘菲    时间: 2012-11-22 21:41
标题: 关于集合和File类的疑问,求助!
本帖最后由 刘菲 于 2012-11-23 13:40 编辑

想要将d:\java文件夹中的".java"文件,全都取出并存储到list集合中,并打印验证结果,
在打印时遇到了问题
下面是代码:
        public static void main(String[] args)
        {
                File dir=new File("d:"+File.separator+"java2");//d:\java2
                List<File> list=new ArrayList<File>();
                fileToList(dir,list);
                System.out.println(list);//在这输出的集合是正确的
               
        }
        public static void fileToList(File dir,List<File> list)
        {
                File[] files=dir.listFiles();
                for(File file:files)
                {
                        if(file.isDirectory())
                                fileToList(file,list);
                        else
                        {
                                if(file.getName().endsWith(".java"))
                                        list.add(file);
                        }
                }
                //System.out.println(list);//为什么把输出语句放在这输出的集合是错误的的
        }
作者: 坚持远方    时间: 2012-11-22 21:49
你下面那句输出语句中的list是形式参数,应该不能打印
作者: 张学永    时间: 2012-11-22 22:02
如果你的输出语句定义在方法内的话,那么在递归的过程中,每次调用到fileToList()都会执行一次输出语句,
所以递归的次数和你打印输出的次数是相符的,也就是在递归的末端,可能是list打印的结果是一个元素,但递归回来的话,list装的元素会越来越多。
你打印出来的集合长度也越来越大。虽然都是一个list,但你打印的是一个list的变化过程,最后打印的那个结果才是需要的结果。
作者: 刘菲    时间: 2012-11-22 23:59
张学永 发表于 2012-11-22 22:02
如果你的输出语句定义在方法内的话,那么在递归的过程中,每次调用到fileToList()都会执行一次输出语句,
...

谢谢你的回答!
但是我还是有些不明白,我觉得在递归的过程中并没有执行到输出语句啊
你能不能帮忙分析下具体过程呢  
十分感谢!
作者: 张学永    时间: 2012-11-23 00:08
刘菲 发表于 2012-11-22 23:59
谢谢你的回答!
但是我还是有些不明白,我觉得在递归的过程中并没有执行到输出语句啊
你能不能帮忙分析下 ...

这么晚了还没睡啊,你可以这样分析啊:当递归到最后一次了,for循环的内容结束了,就会往下执行了,然后执行一次输出语句。接着返回上一层,而上一层的for循环执行完,也会执行for循环下面的输出语句的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2