hadoop中的java目录存在性检查结果npe

5t7ly7z5  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(285)

我试图验证给定的路径是否是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语句。

提前谢谢

cyej8jka

cyej8jka1#

你把文件系统初始化了吗?我想那是空的
构造构造器

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

}

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

r9f1avp5

r9f1avp52#

你已经确定路径不是空的。现在唯一可以为空的是 FileStatus 返回的对象。检查是否为空。
当像这样将方法链接在一起时,您应该始终确保方法不能返回null。如果可能发生这种情况,你永远不应该锁链。基本上是可以返回null的方法,打破了链。

相关问题