日期:2014-05-20  浏览次数:20693 次

关于递归调用函数的一个问题
我这段代码目的是打印出一个文件夹下所有文件和文件夹的名字。如果文件夹下还有文件,则递归调用该函数,打印该子文件夹下的文件和文件夹的名字,直到最后只剩文件为止。
代码如下:

import   java.io.File;

public   class   Test   {

        public   Test()   {
        }
        public   void   readFolderByFile(String   filePath)
      {
              File   file   =   new   File(filePath);
              File[]   tempFile   =   file.listFiles();
              for(int   i   =   0;i <tempFile.length;i++)
              {
                  if(tempFile[i].isFile())
                  {
                          System.out.println( "File   :   "+tempFile[i].getName());
                    }
                    if(tempFile[i].isDirectory())
                    {
                            String   subDirectory   =   tempFile[i].getName();
                            System.out.println( "Directory   :   "+subDirectory);
                            readFolderByFile(subDirectory);   //递归调用在此
                    }
                }  
      }
     
      public   static   void   main(String   Args[])
      {
      Test   test   =   new   Test();
      test.readFolderByFile( "E:\\shared ");
      }
       
}

编译通过,运行,打印出直到第一个文件夹(包括第一个文件夹)的文件的名字后抛出NullPointerException。如下:

--------------------Configuration:   <Default> --------------------
File   :   1.txt
File   :   123.txt
Directory   :   subshared
Exception   in   thread   "main "   java.lang.NullPointerException
        at   Test.readFolderByFile(Test.java:18)
        at   Test.readFolderByFile(Test.java:28)
        at   Test.main(Test.java:36)

Process   completed.

请问如何解决?

------解决方案--------------------
if (tempFile[i].isDirectory()) {
String subDirectory = tempFile[i].getName();
System.out.println( "Directory : " + subDirectory);
readFolderByFile(tempFile[i].getAbsolutePath()); // 递归调用在此
}

这样就可以了

根据绝对路径构造文件