我的程序将遍历目录并获取文件的确切位置。但不幸的是,我在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)
答案 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;
}