黑马程序员技术交流社区

标题: 递归疑问 [打印本页]

作者: 庄星睿    时间: 2012-7-7 10:42
标题: 递归疑问
本帖最后由 庄星睿 于 2012-7-7 11:50 编辑

要遍历一个目录下所有扩展名为.java文件,用文件过滤器问题:
  1. import java.io.*;

  2. class Test1
  3. {
  4. public static void main(String[] args)
  5. {
  6. //listRoots();
  7. //list1();
  8. //list2();
  9. File ff=new File("f:\\diary");
  10. list4(ff);

  11. }
  12. public static void list4(File file)
  13. {
  14. File[] arr=file.listFiles(new FilenameFilter()
  15. {
  16. public boolean accept(File dir,String name)
  17. {
  18. return name.endsWith(".java");  //判断扩展名。java,返回ture

  19. }

  20. });

  21. for(File f : arr)
  22. {
  23. if(f.isDirectory())  //如果是目录,递归
  24.       list4(f);  
  25. else
  26. System.out.println(f);

  27. }

  28. }

  29. public static void list3(File file)
  30. {

  31. File[] arr=file.listFiles(new FileFilter()
  32. {
  33. public boolean accept(File pathname)
  34. {
  35. return pathname.getName().endsWith(".java");
  36. }

  37. });

  38. for (File ff : arr)
  39. {
  40. if(ff.isDirectory())
  41. list3(ff);
  42. else
  43. System.out.println(ff);
  44. }


  45. }
复制代码
在遍历数组的过程中,加了判断,如果是目录,递归,会先遍历diary内的目录,如果不是目录就按照 过滤器返回的结果进行打印,但是结果只能遍历到当前diary目录下的.java文件,不能打印所有的.java文件,这里为什么用文件过滤器不行?
作者: 淡然    时间: 2012-7-7 10:55
本帖最后由 淡然 于 2012-7-7 11:22 编辑
  1. public static void list4(File file)
  2. {
  3. File[] arr=file.listFiles(new FilenameFilter(){       //返回的的File都是java文件,已经过滤掉目录了
  4. public boolean accept(File dir,String name)
  5. {
  6. return name.endsWith(".java"); //判断扩展名。java,返回ture
  7. }
  8. });

  9. for(File f : arr)
  10. {
  11. if(f.isDirectory()) //arr都是java文件,已经过滤掉目录了,这里已经没有意义了
  12. list4(f);
  13. else
  14. System.out.println(f);
  15. }
  16. }
复制代码





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