黑马程序员技术交流社区
标题:
递归问题
[打印本页]
作者:
董将
时间:
2012-12-21 00:17
标题:
递归问题
本帖最后由 董将 于 2012-12-22 19:44 编辑
递归"f:\\"根目录所有的.java文件,报空指针异常。
public void printAllJava(File dir)
{
if(dir!=null)
{
File[] files = dir.listFiles();
for(File file : files)
{
if(file.isFile())
{
if(file.getName().endsWith(".java"))
{
System.out.println(file.getName());
}
}
else
{
printAllJava(file);
}
}
}
}
那里的错误呢
作者:
罗会涛
时间:
2012-12-21 02:37
空指针大概有两种可能性都是dir.listFiles()返回的是空,即files是null。
(1)你传的值是个文件的话,明显就不行,files就是null。
(2)第二种情况很特殊,你传的是个盘符,如“f:”(注意不是“f:\\”),得到的files不是null,但是里面的东西全部不是文件,递归调用时dir.listFile就为null。
File.listFiles()得到的数组居然有可能含有非文件的对象的!
作者:
filter
时间:
2012-12-21 11:41
public static void printAllJava(File dir){
if(dir!=null)
{
File[] files = dir.listFiles();
for(File file : files)
{
if(file.isFile())
{
if(file.getName().endsWith(".java"))
{
System.out.println(file.getName().toString());
}
}
else if(file.exists() && file.isDirectory())//[color=Red]要么是文件,要么是目录[/color]
{
printAllJava(file);
}
}
}
}
复制代码
我改了下你的代码,不过还是感觉优化的不够,而且是在for循环里面递归调用效率应该很低,:
修改过的方法:
public static void printAllJava1(File dir)
{
if(dir.exists() && dir.isDirectory()){//判断存在而且是目录,就把文件出来
File[] files = dir.listFiles();
for (File file : files) {
printAllJava1(file);//重复调用
}
}
else {//[color=Red]否则就打印出所需的文件名字[/color]
if(dir.getName().endsWith(".java"))
System.out.println(dir.getName());
}
}
复制代码
希望有好人来给出更优化的方案
{:soso_e100:}
作者:
王进亮
时间:
2012-12-21 21:44
估计你传的是个文件,这个程序没有问题
import java.io.File;
public class aaa {
public static void main(String[] args) {
File file=new File("E:\\javap\\File\\src");
printAllJava(file);
}
public static void printAllJava(File dir)
{
if(dir.isDirectory())// 测试此抽象路径名表示的文件是否是一个目录。
{
File[] files = dir.listFiles();
for(File file : files)
{
if(file.isFile())
{
if(file.getName().endsWith(".java"))
{
System.out.println(file.getName());
}
}
else
{
printAllJava(file);
}
}
}
}
}
作者:
董将
时间:
2012-12-22 17:12
多谢指点,问题已经解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2