我试图验证给定的路径是否是hdfs中的目录或文件,但它会在fs.getfilestatus(path.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行指向accept方法中的if语句。
提前谢谢
2条答案
按热度按时间cyej8jka1#
你把文件系统初始化了吗?我想那是空的
构造构造器
编辑:我刚刚注意到你正在使用一个静态类,所以我不知道做一个构造函数是否可行。
r9f1avp52#
你已经确定路径不是空的。现在唯一可以为空的是
FileStatus
返回的对象。检查是否为空。当像这样将方法链接在一起时,您应该始终确保方法不能返回null。如果可能发生这种情况,你永远不应该锁链。基本上是可以返回null的方法,打破了链。