0

我的代码中存在各种异常问题。该类旨在查找计算机上的所有文件夹/子文件夹并将它们列为 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();
   }
}
4

3 回答 3

2

您从未初始化paths

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

请注意,我也使用了String这里的类型参数,你应该这样做。通常尽量避免使用原始类型

于 2013-09-16T15:19:47.033 回答
1

您在此行的语法不正确

private ArrayList<String> paths;

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

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

注意:我没有把String里面<>作为它在 java 1.7 中的冗余。

于 2013-09-16T15:30:32.607 回答
0

补充说明:

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

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

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

于 2013-09-16T16:21:32.497 回答