Filesystem查询文件系统之PathFilter对象。

        通配符模式并不总能够精确的描述我们想要访问的文件集。比如,使用通配格式排除一个特定的文件就不太可能。FileSystem中的listStatus()和blobStatus()方法提供了可选的PathFilter对象,以编程方式控制通配符:

public interface PathFilter {

boolean accept(Path path);

}

        PathFilter与java.io.FileFilter一样,是Path对象而不是File对象。

        下面范例代码显示了PathFilter用于排除匹配正则表达式的路径。

public class RegexExcludePathFilter implements PathFilter {

private final String regex;

public RegexExcludePathFilter(String regex) {

this.regex = regex;

}

public boolean accept(Path path) {

return !path.toString().matches(regex);

}

}

        这个过滤器只传递不匹配于正则表达式的文件。在通配符选出一组需要包含的初始文件之后,过滤器可优化其结果。如下示例将扩展到/2017/12/30:

fs.globStatus(new Path("/2007/*/*"), new RegexExcludeFilter("^.*/2007/12/31$"))

         以Path为代表,过滤器只能作用于文件名。不能针对文件的属性(例如创建时间)来构建过滤器。但是,过滤器却能实现通配符模式和正则表达式都无法完成的匹配任务。例如,如果将文件存储在按照日期排列的目录结构中,则可以写一个Pathfilter选出给定范围内的文件。

你可能感兴趣的:(#,Hadoop)