Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我有一个空指针异常,我';我不确定它在我的代码中的位置_Java_File_Nullpointerexception_Filenotfoundexception_File Not Found - Fatal编程技术网

Java 我有一个空指针异常,我';我不确定它在我的代码中的位置

Java 我有一个空指针异常,我';我不确定它在我的代码中的位置,java,file,nullpointerexception,filenotfoundexception,file-not-found,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 =

我的代码中存在各种异常问题。该类用于查找计算机上的所有文件夹/子文件夹,并将它们列为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();
   }
}
导入java.io.File;
导入java.util.ArrayList;
公共类检测器
{
私有数组列表路径;
公共探测器()
{
File[]root=File.listRoots();
用于(文件驱动器:根目录)
{
getpath(drive.listFiles());
}
}
公共检测器(字符串str)
{
File[]bob=新文件(str).listFiles();
getpath(bob);
}
公共void getpath(文件[]文件)
{
用于(文件:文件)
{
if(file.isDirectory())
{
add(file.getName());
getpath(file.listFiles());
}
}
}
公共阵列列表getPathList()
{
返回路径;
}
公共无效打印路径()
{
for(字符串str:this.getPathList())
{
系统输出打印项次(str);
}
}
公共静态void main(字符串[]args)
{
检测器tom=新检测器(“/F:”);
tom.printPaths();
}
}

您从未初始化路径

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

请注意,我在这里还使用了一个类型参数
String
,这是您应该使用的。一般情况下,尽量避免使用。

您从未初始化过
路径:

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

请注意,我在这里还使用了一个类型参数
String
,这是您应该使用的。一般来说,尽量避免使用。

这一行的语法不正确

private ArrayList<String> paths;
私有数组列表路径;
您没有正确初始化arraylist。为了正确初始化它,您必须执行以下操作

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

注意:在Java1.7中,我没有将
字符串
放在
中作为冗余

此行的语法不正确

private ArrayList<String> paths;
私有数组列表路径;
您没有正确初始化arraylist。为了正确初始化它,您必须执行以下操作

private ArrayList<String> paths = new ArrayList<>();
private ArrayList path=new ArrayList();
注意:在Java1.7中,我没有将
字符串
放在
中作为冗余

附加备注:

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

public void getPaths(File[] files)
{
    if (files == null) {
        return;
    }
Java 7有一个新的类,它附带了一些新类,但值得我们去习惯。

另外一点:请注意:

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

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

Java 7有一个新的类,它附带了一些新的类,但值得习惯。

不确定
“/F:“
真的应该是有效的,你从来没有初始化过arraylist…不确定
”/F:”
真的应该是有效的你从来没有初始化过你的arraylist…想提一下Liskov吗?@Bohemian你是什么意思?:如果遵循最佳实践(而不是具体的实现类型
arraylist
),那么
路径的类型应该声明为抽象类型
列表
)想提到Liskov吗?@Bohemian你是什么意思?:如果遵循最佳实践(而不是具体的实现类型
ArrayList
),则应将
路径的类型声明为抽象类型
List