今天还是没事看了看elfinder源码,发现之前说的两个版本实现都是基于不同的jdkelfinder源码浏览-Volume文件系统操作类(1)

带前端页面的是基于1.6中File实现,另一个是基于1.7中的Path实现,

今天看了一个非常有意思的匿名类应用,先看基础java中一个引人深思的匿名内部类

其中引起我注意的是一个文件搜索的实现,

项目代码并没有引起我的问题,但深思的是基于1.8源码的实现使用了一个

@@@@@DirectoryStream.Filter<Path>接口,此接口是一个包装接口,使用了java1.8中的接口函数式方法@FunctionalInterface@@@@@@@@@@@@@@@@

请先参考java1.7中新增的NIOJAVA NIO:Path ,File

首先先看一看此方法应用,此方法获取给定的工作空间中非隐藏的文件列表,

包装Volume类
  @Override
public Target[] listChildren(Target target) throws IOException {
//其中这里使用了一个NioHelper工具类封装了之前定义的Path接口,来获取非隐藏文件 List<Path> childrenResultList = NioHelper.listChildrenNotHidden(fromTarget(target));
List<Target> targets = new ArrayList<>(childrenResultList.size());
for (Path path : childrenResultList) {
targets.add(fromPath(path));
}
return targets.toArray(new Target[targets.size()]);
}

令人深思的是下面我们它的实现

NIOHelper类

此类是我今天看到的一个匿名接口使用

  /**
* Gets children paths from the give directory (excluding hidden files).
* 带有文件过滤的
* @param dir path to the directory.
* @return the children paths from the give directory.
* @throws IOException if something goes wrong.
*/
public static List<Path> listChildrenNotHidden(Path dir) throws IOException {
// not hidden file filter
//
DirectoryStream.Filter<Path> notHiddenFilter = new DirectoryStream.Filter<Path>() {
public boolean accept(Path path) throws IOException {
return !Files.isHidden(path);
}
};
    //调用了同级类中的方法listChildren
return listChildren(dir, notHiddenFilter);
}
  /**
* Gets children paths from the give directory appling the given filter.
* 依据NIO中Files类中newDirectoryStream方法传入一个
    DirectoryStream.Filter接口来判断是否是隐藏目录,如果是就舍弃,不是就加入一个list中,
    然后使用Collrctions中的unmodifiableList设置此list不可更改,
    通过判断传入的dir来让Collrctions中emptyList方法设置返回的list是否是一个空的
* @param dir path to the directory. * @param filter the filter to be applied * @return the children paths from the give directory. * @throws IOException if something goes wrong. */ 
public static List<Path> listChildren(Path dir, DirectoryStream.Filter<? super Path> filter) throws IOException {
    if (isFolder(dir)) { List<Path> list = new ArrayList<>();
try (DirectoryStream<Path> directoryStream = (filter != null ? Files.newDirectoryStream(dir, filter) : Files.newDirectoryStream(dir))) {
for (Path p : directoryStream) {
list.add(p);
}
}
return Collections.unmodifiableList(list);
}
return Collections.emptyList();
}

至此我们已经看完了这个实现的具体应用,发现原来匿名类是如此的强大,完全少写很多之前写代码中的逻辑判断

elfinder中通过DirectoryStream.Filter实现筛选隐藏目录(二)的更多相关文章

  1. django-filter 使用Filter来筛选你的数据

    django-filter Django-filter is a generic, reusable application to alleviate writing some of the more ...

  2. Python day11 filter函数筛选数据,reduce函数压缩数据的源码详解

    1.filter滤波器函数定义一个数组,需求:过滤出带ii的字符串 arr=['dsdsdii','qqwe','pppdiimmm','sdsa','sshucsii','iisdsa'] def ...

  3. js Array 中的 map, filter 和 reduce

    原文中部分源码来源于:JS Array.reduce 实现 Array.map 和 Array.filter Array 中的高阶函数 ---- map, filter, reduce map() - ...

  4. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  5. Android中的Intent Filter匹配规则介绍

    本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity ...

  6. java Servlet中的过滤器Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  7. jQuery中find()和filter()的区别

    filter(expr):筛选出与指定表达式匹配的元素的元素集合,其中expr可以是多个选择器的组合.是对自身集合元素的筛选. find()会在元素内寻找匹配元素,而filter()是筛选元素:是对它 ...

  8. IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例

    IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add bu ...

  9. css3中强大的filter(滤镜)属性

    CSS3中强大的filter(滤镜)属性 博主最近在做网站的过程中发现了一个非常强大的CSS3属性,就是filter(滤镜)属性,喜欢p图的朋友看名字都应该知道这是什么神器了吧.当然,这个属性的效果肯 ...

随机推荐

  1. LRUCache原理分析

    一.注释 LRUCache的原理,基本都在注释里面描述清楚了. /** * A cache that holds strong references to a limited number of va ...

  2. nginx新的站点的配置

    每一次配置新的站点的时候,要记得重新启动nginx: sudo -s; nginx -s reload; 配置文件,有涉及到 每一个站点都有一个.conf文件. 域名重定向:Gas Mask的软件的使 ...

  3. 基于Python的Flask的开发实战(第二节程序的基本结构)

    1.初始化 所有的flask程序都必须创建一个程序实例 web服务器使用wsgi接口协议,把接收客户端的请求都转发给这个程序实例来进行处理.这个程序实例就是flask对象 from flask imp ...

  4. jenkins+ant+jmeter自动化环境搭建(一)

                        写在最前面: jmeter:测试接口的工具,支持java语言: ant:Apache Ant是一个Java库和命令行工具,其任务是将构建文件中描述的进程作为相互 ...

  5. 学生信息管理系统(c语言)

    ①注意: 程序中使用了sleep()函数.system()函数 关于 sleep() 函数 sleep() 函数的头文件和用法会因环境的不同而有所不同. 具体见-sleep()函数功能及用法 关于sy ...

  6. windows下常用工具

    下面是平时自用的一些软件,感觉挺好用的,推荐给大家咯. everything 搜索神器 faststone capture 红绿小工具,工具小功能强 clcl 复制粘贴神器 f.lux linux和w ...

  7. burpsuite + sqlmap 日志导出批量扫描

    http://lcx.cc/?i=4207   在burpsuite中options -->misc-->logging中选择要记录的日志来源: 一般是proxy request: 生成的 ...

  8. 新工具︱微软Microsoft Visual Studio的R语言模块下载试用Ing...(尝鲜)

    笔者:前几天看到了以下的图片,着实一惊.作为R语言入门小菜鸟,还是觉得很好看,于是花了一点时间下载下来试用了一下,觉得还是挺高大上的. 就是英文不好是硬伤.下面贴给小白,我当时的下载步骤与遇见的问题. ...

  9. HighCharts之2D柱状图、折线图和饼图的组合图

    HighCharts之2D柱状图.折线图和饼图的组合图 1.实例源码 ColumnLinePie.html: <!DOCTYPE html> <html> <head&g ...

  10. Flex中获取RadioButtonGroup中的RadioButton的值

    Flex中获取RadioButtonGroup中的RadioButton的值 1.设计源码 <?xml version="1.0" encoding="utf-8& ...