A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dkwoxihuan 中级黑马   /  2014-5-22 18:36  /  1708 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

private static File FindA(File dir)
        {
                File[] files = dir.listFiles();
                for(int x=0; x<files.length; x++)
                {
                        if(files[x].isDirectory())
                                FindA(files[x]);
                        else
                        {
                                if(files[x].toString().endsWith("A.java"))
                                {
                                        System.out.println("ddd:"+files[x]);
                                        return files[x];
                                }
                        }
                }
                return null;
        }

这个代码无法取到以A.java结尾的File  始终返回null, 求分析
还是不太懂递归和文件啊{:3_53:}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

5 个回复

倒序浏览
哥们,你这代码木有问题呀,我建议你在确认下你指定的文件夹dir下是否有"A.java"文件;
另外一个小小的建议就是老毕说的,当你找不着错了,就按代码先后顺序,写打印语句,判断错误发生在哪里,在纠正,俺也是新手,希望对你有所帮助。
回复 使用道具 举报
当然有问题啊。FindA函数有返回值,你递归的时候没拿东西接收这个返回值。所以假如这个函数运行时,得到的第一个files[0]是个目录的话,它最后会执行return null。就导致在主函数接收时得到null。
要想不得到null,只有一种情况,就是dir下面只有一个文件,就是以A.java文件结尾。这样结果就会返回一个文件而不是NULL。

我帮你改了一下代码,这样写可以把dir下面所以目录包括子目录都找出以A.java结尾的文件。:
  1. import java.io.*;
  2. import java.util.*;

  3. class test8
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 File dir = new File("E:\\My Document");
  8.                     List<File> fl = new ArrayList<File>();
  9.                     FindA(dir,fl);
  10.                 Iterator<File> it = fl.iterator();
  11.                 while(it.hasNext())
  12.                         System.out.println(it.next());
  13.         }

  14.         private static void FindA(File dir,List<File> fl)
  15.         {
  16.                 File[] files = dir.listFiles();
  17.                 for(int x=0; x<files.length; x++)
  18.                 {
  19.                         if(files[x].isDirectory())
  20.                                 FindA(files[x],fl);
  21.                         else
  22.                         {
  23.                                 if(files[x].toString().endsWith("A.java"))
  24.                                 {
  25.                                         System.out.println("ddd:"+files[x]);
  26.                                         fl.add(files[x]);
  27.                                 }
  28.                         }
  29.                 }
  30.                
  31.         }
  32. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
这是对文件操作的吗?
回复 使用道具 举报
大哥,你的return null,写错地方了吧
回复 使用道具 举报
wangleixhlm 发表于 2014-5-22 19:28
当然有问题啊。FindA函数有返回值,你递归的时候没拿东西接收这个返回值。所以假如这个函数运行时,得到的 ...

讨论:  若dir 中有以"A.java"结尾文件,得到的第一个files[0]是目录,确实会执行到return null;但程序会继续循环下去,当执行到以"A.java"结尾的文件时候,就会打印出该文件路径,所以还是能找出来带有"A.java"结尾的文件的,当然这个代码如果同一个目录下有多个"A.java"结尾的文件,则只会找着一个。
另:哥们你的修改也挺到位的,学习了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马