我有一个空指针异常,我不知道它在我的代码中的位置

时间:2013-09-16 15:13:33

标签: java file nullpointerexception filenotfoundexception file-not-found

我的代码中存在各种异常问题。该类旨在查找计算机上的所有文件夹/子文件夹,并将它们列为ArrayList。它并不关心它们中的文件。这是代码。请帮助,我已经对此感到沮丧一个星期了。

import java.io.File;
import java.util.ArrayList;


public class Detector
{
   private ArrayList<String> paths;

   public Detector()
   {
      File[] roots = File.listRoots();
      for(File drive : roots)
      {
         getPaths(drive.listFiles());
      }
   }
   public Detector(String str)
   {

      File[] bob = new File(str).listFiles();
      getPaths(bob);
   }

   public void getPaths(File[] files)
   {
      for (File file : files)
      {
          if(file.isDirectory())
          {
             paths.add(file.getName());
             getPaths(file.listFiles());
          }
      }
   }

   public ArrayList<String> getPathList()
   {
      return paths;
   }

   public void printPaths()
   {
      for(String str: this.getPathList())
      {
         System.out.println(str);
      }
   }
   public static void main(String[] args)
   {
         Detector tom = new Detector("/F:");
         tom.printPaths();
   }
}

3 个答案:

答案 0 :(得分:2)

您从未初始化paths

private ArrayList<String> paths = new ArrayList<String>();

请注意,我在这里也使用了String的类型参数。一般情况下,请尽量避免使用raw types

答案 1 :(得分:1)

此行的语法不正确

private ArrayList<String> paths;

您没有正确初始化arraylist。为了正确初始化你必须做

private ArrayList<String> paths = new ArrayList<>();

注意:我没有将String置于<>内作为java 1.7中的冗余。

答案 2 :(得分:0)

补充说明:

File.listFiles()可能会返回null,这可能是您的NullPointerException。所以:

public void getPaths(File[] files)
{
    if (files == null) {
        return;
    }

Java 7有一个Files.walkFileTree,它带有几个新类,但值得习惯。