我这段代码目的是打印出一个文件夹下所有文件和文件夹的名字。如果文件夹下还有文件,则递归调用该函数,打印该子文件夹下的文件和文件夹的名字,直到最后只剩文件为止。
代码如下: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.请问如何解决?

解决方案 »

  1.   

    if (tempFile[i].isDirectory()) {
    String subDirectory = tempFile[i].getName();
    System.out.println("Directory : " + subDirectory);
    readFolderByFile(tempFile[i].getAbsolutePath()); // 递归调用在此
    }这样就可以了根据绝对路径构造文件
      

  2.   

    谢谢楼上。再问一下,我打算用一个private String[]来存储这些文件名,需要预设数组的大小,这样可能会导致越界,或者没有装满,以致于这个数组后面部分打印出来为null。如果换用vector,会有性能的损失,而且影响输入输出的规范,请各位给点建议。
      

  3.   

    性能再损失能有多少不要计较这点小的效率数组肯定不行 用List吧 动态数组