黑马程序员技术交流社区

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

作者: 张海涛    时间: 2013-1-13 07:48
标题: 关于集合和File类的疑问!
本帖最后由 张海涛 于 2013-1-15 01:47 编辑

(手机发表,格式可能有点乱,望谅解,没网的孩纸伤不起啊!)想要将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);//为什么把输出语句放在这输出的集合是错误的的         }
作者: jonn    时间: 2013-1-13 09:55
LZ 对成员方法与类的关联以及调用和返回值了解深浅,多练习练习
容器对象list调用了fileToList()方法 无返回值,此容器list的数据放在缓存堆区,而后面就直接打印容器list的所有数据
所以fileTolist()方法里没必要覆写Objetc的toString()方法 就是说此方法里System.out.println(list)是多余了

另外一种改法,fileToList()函数里保留 System.out.println(list),那么主线程main()没必要重写System.out.println(list),容器list调用fileToList()自然会打印对象堆区所有数组...

作者: 张森    时间: 2013-1-13 11:37
LZ 您的代码  我测试了没有问题    您最好把你的错误说清楚  或者看看你提问的代码是不是跟你的问题不一样
我真不知道 楼上是怎么看出错误来到   
作者: 罗会涛    时间: 2013-1-13 11:49
楼上貌似说的不对
楼主的问题是没有理解好递归方法的执行顺序。
如果只有一个文件夹如:"d:"+File.separator+"java2",这个文件夹下面没有子文件夹,SOP写在哪里都一样。
但是如果有子文件夹,情况就不同了。下载递归方法里,会发现打印了多行,说明SOP语句被多次执行。因为每递归处理一个文件夹它都执行了一次,如果文件夹中有.java文件就添加进List,没有就打印前面的。
总的执行次数就是总共的文件夹数目,最后一次和需要的一样。
作者: 铿锵科技    时间: 2013-1-13 13:06
       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);//为什么把输出语句放在这输出的集合是错误的的        
//System.out.println(list);//为什么把输出语句放在这输出的集合是错误的的 这是因为你要输出的list是函数要传进来的参数,还没有值,所以错了
作者: jonn    时间: 2013-1-13 13:40
张森 发表于 2013-1-13 11:37
LZ 您的代码  我测试了没有问题    您最好把你的错误说清楚  或者看看你提问的代码是不是跟你的问题不一样
...

代码确实没错,你详细看题,LZ 对 oop概念相当浅
作者: 张森    时间: 2013-1-13 13:43
赵文 发表于 2013-1-13 13:40
代码确实没错,你详细看题,LZ 对 oop概念相当浅

恩  谢谢   也学习了  
作者: jonn    时间: 2013-1-13 13:45
张森 发表于 2013-1-13 13:43
恩  谢谢   也学习了

:handshake 共同学习...




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