线程错误中的Java异常

时间:2014-10-18 09:28:39

标签: 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.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)

似乎有什么问题?感谢

4 个答案:

答案 0 :(得分:1)

File.listFiles()如果在对象上使用的不是目录,或者无法访问,则可能会返回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());
   }
}

答案 1 :(得分:1)

问题最常发生,因为在Srch方法中,在检查listFiles实际上是否是目录之前,您调用root。正如该方法的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并将其修复为上游

下次发帖时的旁注:

  • 为您发布的代码提供适当的缩进。你很难阅读
  • 粘贴代码时尽量避免复制粘贴错误。前两行是重复的
  • 您发布了堆栈跟踪(好),但如果您指示堆栈跟踪中出现的行号对应哪一行会更好。请记住,我们无法访问您的代码,因此将堆栈跟踪中的行号链接到您发布的代码段远非琐碎

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这里:

File[] list=root.listFiles();

方法listFile可以返回" null"。 检查Javadoc:http://docs.oracle.com/javase/6/docs/api/java/io/File.html#listFiles()

那么你对这个null变量做一个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());
    }
  }
}

可能是" Home \ Documents"不存在,请尝试使用abslotute路径。