目录存在检查结果在hadoop中的NPE

时间:2014-06-13 13:20:58

标签: java hadoop mapreduce

我正在尝试验证给定路径是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语句。

enter image description here

提前致谢

2 个答案:

答案 0 :(得分:0)

你有没有把文件系统fs?我认为这是一个空的

制作构造函数

public FileSystem(){
    fs = new FileSystem();

}

编辑:我刚刚注意到你正在使用静态类,所以我不知道是否可以使用构造函数。

答案 1 :(得分:0)

您已经确定路径不为空。现在唯一可以为null的是返回的FileStatus对象。检查是否为null。

当像这样链接方法时,你应该始终确保方法中间的某个地方不能返回null。如果可能发生这种情况,你永远不应该链接。基本上可以返回null的方法会破坏链。