我正在尝试验证给定路径是HDFS中的目录或文件,但它会在fs.getFileStatus(路径).isDir()行产生NPE。我不明白这里的问题是什么,即使我验证了非空的路径。
public static class RegexExcludePathFilter extends Configured implements
PathFilter {
private String path;
String patterns = "hdfs://localhost:9100/user/input-new/ncdc/filterdata/2007.[0-1]?[0-2].[0-9][0-9].txt" ;
Configuration conf;
Pattern pattern;
FileSystem fs;
@Override
public boolean accept(Path path) {
System.out.println(path);
try {
if(fs.getFileStatus(path).isDir()){
System.out.println(path);
return true;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return path.toString().matches(patterns);
}
}
108行指向接受方法中的if语句。
提前致谢
答案 0 :(得分:0)
你有没有把文件系统fs?我认为这是一个空的
制作构造函数
public FileSystem(){
fs = new FileSystem();
}
编辑:我刚刚注意到你正在使用静态类,所以我不知道是否可以使用构造函数。
答案 1 :(得分:0)
您已经确定路径不为空。现在唯一可以为null的是返回的FileStatus
对象。检查是否为null。
当像这样链接方法时,你应该始终确保方法中间的某个地方不能返回null。如果可能发生这种情况,你永远不应该链接。基本上可以返回null的方法会破坏链。