当然有问题啊。FindA函数有返回值,你递归的时候没拿东西接收这个返回值。所以假如这个函数运行时,得到的第一个files[0]是个目录的话,它最后会执行return null。就导致在主函数接收时得到null。
要想不得到null,只有一种情况,就是dir下面只有一个文件,就是以A.java文件结尾。这样结果就会返回一个文件而不是NULL。
我帮你改了一下代码,这样写可以把dir下面所以目录包括子目录都找出以A.java结尾的文件。:
- import java.io.*;
- import java.util.*;
- class test8
- {
- public static void main(String[] args)
- {
- File dir = new File("E:\\My Document");
- List<File> fl = new ArrayList<File>();
- FindA(dir,fl);
- Iterator<File> it = fl.iterator();
- while(it.hasNext())
- System.out.println(it.next());
- }
- private static void FindA(File dir,List<File> fl)
- {
- File[] files = dir.listFiles();
- for(int x=0; x<files.length; x++)
- {
- if(files[x].isDirectory())
- FindA(files[x],fl);
- else
- {
- if(files[x].toString().endsWith("A.java"))
- {
- System.out.println("ddd:"+files[x]);
- fl.add(files[x]);
- }
- }
- }
-
- }
- }
复制代码 |