无法运行walkFileTree方法

时间:2018-03-07 06:35:43

标签: java

我的程序将遍历目录并获取文件的确切位置。但不幸的是,我在NullPointerException方法上获得walkFileTree。我尝试打印出rootDirectory值并且能够显示。但是从以下代码行中抛出异常

Files.walkFileTree(rootDirectory, new FileVisitor<Path>()



这是我的示例源代码

public class DirectoriesMonitoring 
{
   static Path rootDirectory;

   public static void main(String [] main)
   {
       rootDirectory = Paths.get("C:/REST API/source");
       System.out.println(rootDirectory);

       try
       {
           System.out.println(rootDirectory);
           Files.walkFileTree(rootDirectory, new FileVisitor<Path>()
                   {
                    //System.out.println(rootDirectory); 
                    @Override
                    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException 
                    {
                        // TODO Auto-generated method stub
                        return null;
                    }

                    @Override
                    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException 
                    {
                        System.out.println("The file is : "+file);  
                        return FileVisitResult.CONTINUE;
                    }

                    @Override
                    public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException 
                    {
                        // TODO Auto-generated method stub
                        return null;
                    }

                    @Override
                    public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException 
                    {
                        // TODO Auto-generated method stub
                        return null;
                    }

                });  


       }
       catch(IOException e)
       {
          e.printStackTrace();
       }
   }
}



这是完整的堆栈轨迹

C:\REST API\source
C:\REST API\source
Exception in thread "main" java.lang.NullPointerException
    at java.util.Objects.requireNonNull(Objects.java:203)
    at java.nio.file.Files.walkFileTree(Files.java:2699)
    at java.nio.file.Files.walkFileTree(Files.java:2742)
    at DirectoriesMonitoring.main(DirectoriesMonitoring.java:21)

1 个答案:

答案 0 :(得分:0)

根据Javadocs

控制流程

也许您希望遍历文件树以查找特定目录,并在找到时希望该进程终止。也许你想跳过特定的目录。

FileVisitor方法返回FileVisitResult值。您可以中止文件遍历过程或控制在FileVisitor方法中返回的值是否访问目录:

CONTINUE - 表示文件行走应该继续。如果preVisitDirectory方法返回CONTINUE,则访问该目录。

TERMINATE - 立即中止文件行走。返回此值后,不会再调用其他文件遍历方法。

SKIP_SUBTREE - 当preVisitDirectory返回此值时,将跳过指定的目录及其子目录。树枝被“修剪掉”。

SKIP_SIBLINGS - 当preVisitDirectory返回此值时,不访问指定的目录,不调用postVisitDirectory,也不会访问任何未访问的兄弟姐妹。如果从postVisitDirectory方法返回,则不会访问其他兄弟节点。基本上,在指定的目录中没有任何进一步的发生。

更改为

 public FileVisitResult postVisitDirectory(Path dir,
                                      IOException exc) {
    System.out.format("Directory: %s%n", dir);
    return CONTINUE;
}