线程错误中的Java异常

线程错误中的Java异常,java,file,Java,File,我正在尝试创建一个程序,该程序将转到特定的控制器并打印位于其中的文件 代码如下: import java.io.File; public class FileViewer { mport java.io.File; public class FileViewer { public void Srch(String path) { File root=new File(path); File[] list=root.listFiles(); for(File x:list) { if(x

我正在尝试创建一个程序,该程序将转到特定的控制器并打印位于其中的文件

代码如下:

import java.io.File;
 public class FileViewer {
 mport java.io.File;
public class FileViewer {

 public void Srch(String path)
{
File root=new File(path);
File[] list=root.listFiles();

for(File x:list)
{
if(x.isDirectory())
{
Srch(x.getAbsolutePath());
System.out.println(x.getAbsolutePath());
}
else
{
System.out.println(x.getAbsolutePath());
}}}}


public class Viewer {


    public static void main(String[] args) {
    FileViewer Srch2=new FileViewer();
    Srch2.Srch("Home\\Documents");

}
}

我得到了以下错误

 Exception in thread "main" java.lang.NullPointerException
 at FileViewer.Srch(FileViewer.java:9)
 at Viewer.main(Viewer.java:7)

有什么问题吗?谢谢

当java想要使用不存在的东西时,会出现java.lang.NullPointerException。可能是路径错误吗?

如果在非目录或无法访问的对象上使用,则可能返回
null
。我不确定是否存在
“Home\\Documents”
,但您可能应该在方法中采取防御措施:

public void Srch(String path) {
   File root=new File(path);
   if (root.exist() && root.isDirectory()) {
      File[] list=root.listFiles();

      for(File x:list) {
         Srch(x.getAbsolutePath());
         System.out.println(x.getAbsolutePath());
      }
   } else {
      System.out.println(x.getAbsolutePath());
   }
}

问题最常见的原因是,在
Srch
方法中,在检查
root
是否实际上是目录之前调用了
listFiles
。正如该方法的javadoc中所述

如果此抽象路径名不表示目录,则返回null

确保你也能处理好这个案子。比如说

public class FileViewer {
 public void Srch(String path){
   File root=new File(path);
   File[] list=root.listFiles();
   if ( list == null ){
     return;
   }
   for(File x:list){
     if(x.isDirectory()){
       Srch(x.getAbsolutePath());
       System.out.println(x.getAbsolutePath());
     } else {
       System.out.println(x.getAbsolutePath());
     }
   }
 }
}
请注意,
NullPointerException
是Java中最容易调试的异常之一。只需将调试器的断点放在stacktrace中指示的行上,并检查哪个对象是
null
。然后您就知道了为什么会出现异常,并可以开始修复它。这通常归结为:

  • null
    是一种有效的情况,您忘记处理它了
  • null
    不是一种有效的情况,然后您需要调查该变量如何为
    null
    ,并在上游修复它
下次发布问题时请注意:

  • 为您发布的代码提供适当的缩进。你的真的很难读
  • 粘贴代码时尽量避免复制粘贴错误。前两行是重复的
  • 您发布了stacktrace(很好),但是如果您指出stacktrace中出现的行号对应于哪一行,那就更好了。请记住,我们无法访问您的代码,因此将stacktrace中的行号链接到您发布的代码片段绝非易事
    • 此处:

      File[] list=root.listFiles();
      
      方法listFile可能返回“null”。 检查Javadoc:

      然后对这个空变量执行foreach,如果给Srch方法的路径名不表示目录,则会得到一个NullPointerException

      if(list!=null)
      {
        for(File x:list)
        {
          if(x.isDirectory())
          {
            Srch(x.getAbsolutePath());
            System.out.println(x.getAbsolutePath());
          }
          else
          {
            System.out.println(x.getAbsolutePath());
          }
        }
      }
      
      可能是“主页\文档”不存在,请尝试使用abslotute路径。