一. 点睛

java io流里面使用到了很多的设计模式,最典型的就是装饰模式,还有命令模式。通过对文件过滤器功能的简单使用,可以一窥java io流对命令设计模式的典型使用。下面分两部分来讲,先举例说说文件过滤器的简单使用,再引申到它是如何使用到命令设计模式的,不会大篇幅讲模式,对命令模式想做更深入的了解请参考其他资料。
二. 示例
我们进行java编程的时候,如果想要访问文件或者目录,会使用File类,File是一个很强大的类,不管文件还是目录都可以使用它。如果要遍历文件会使用到File类的list()方法,它会列出当前File对象的所有子文件名和路径名,如果有的文件名或者路径名不想要列出来怎么办?File类给提供了另外一个重载的具有过滤功能的方法list(FilenameFilter filter)可以满足我们的需要,方法声明如下:
public String[] list(FilenameFilter filter);
参数里面的FilenameFilter就是文件名过滤接口,该接口有一个方法accept()方法,我们自定义的文件名过滤器需要实现该接口,并实现accept()方法来自定义规则。FilenameFilter接口声明如下所示:
public interface FilenameFilter {
boolean accept(File dir, String name);
}
下面来看具体怎么使用的,含义为列出当前工作空间下所有以.xml结尾的文件名或者路径名。
1. 编写自定义文件过滤器:
package org.light4j.io.fileFilter;
import java.io.File;
import java.io.FilenameFilter;
/**
* 自定义文件名过滤器
*
* @author longjiazuo
*
*/
public class MyFilenameFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
// 如果文件以.xml结尾则符合条件返回true
return name.endsWith(".xml");
}
}
2. 编写测试类
package org.light4j.io.fileFilter;
import java.io.File;
/**
* 文件过滤器测试
*
* <p>
* 列出当前工作目录下符合条件的所有子文件名和路径名
* </p>
*
* @author longjiazuo
*
*/
public class FilenameFilterTest {
public static void main(String[] args) {
// 获取工作目录
String workDir = System.getProperty("user.dir");
File file = new File(workDir);
// 列举当前工作目录下的所有文件
String[] files = file.list(new MyFilenameFilter());
// 循环遍历
for (String string : files) {
System.out.println(string);
}
}
}
运行上面代码可以在控制台看到只列出以.xml结尾的文件名或者路径名。
三. 命令设计模式
命令模式是关于如何处理一个对象请求另外一个对象调用其方法完成某项功能的设计模式,当一个对象请求另外一个对象调用其方法时,并不和被请求的对象直接交互,而是把这种请求封装到一个命令对象中,具体做法是将请求封装在命令对象的一个方法里,将命令对象作为参数传递。命令模式的核心就是使用命令对象来封装方法的调用。
在项目中,我们不会只有一个类,所以经常涉及一个对象请求另外一个对象调用它的方法来达到某种目的。如果请求者这时候不希望或者无法直接和被请求者进行交互,换句话说就是请求者不包含被请求者的引用,那么这个时候二者如何进行交互?我们可以使用命令模式来达到目的。例如,我们日常点外卖,我们并不直接和饭店打交道,而是会上美团等外卖网站购买,外卖网站会把你要买外卖的请求作为一个点餐命令告诉饭店,只要该点餐命令被成功传递给饭店,你就一定能够收到外卖。
现在回到文件过滤器的使用上面来,File类的list(FilenameFilter filter)方法通过使用一个接口对象作为参数来实现过滤文件名的功能,具体的规则定义则是在FilenameFilter接口子类的方法accept()里面来实现的,这就是对命令设计模式的使用。
按道理,既然list(FilenameFilter filter)方法想要一个判断哪些文件需要被列出来的规则,那我们把规则传进去就行了,这个规则是一个代码块,但是目前的java并不支持向方法里面传入代码块的做法,所以java使用了FilenameFilter的accept()方法来封装判断规则,传入的MyFilenameFilter对象的作用其实是为了传入accept()方法的方法体,这个方法体的作用就是判断哪些文件名或者路径名符合规则,list(FilenameFilter filter)的实现源码如下所示:
四. 源代码示例
github地址:点击查看
码云地址:点击查看
以上所述是小编给大家介绍的Java IO文件过滤器对命令设计模式的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# java
# io
# 文件过滤器
# Java File类常用方法与文件过滤器详解
# 使用java文件过滤器输出制定格式文件路径的实例代码
# Java实现简单文件过滤器功能
# Java文件过滤器实现按条件筛选文件
# 自定义
# 另外一个
# 是一个
# 方法来
# 遍历
# 点击查看
# 请求者
# 所示
# 来实现
# 小编
# 符合条件
# 目录下
# 你就
# 子类
# 在此
# 这就是
# 则是
# 它是
# 把你
# 给大家
相关文章:
建站主机解析:虚拟主机配置与服务器选择指南
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
建站之星如何修改网站生成路径?
建站之星后台管理:高效配置与模板优化提升用户体验
C++时间戳转换成日期时间的步骤和示例代码
网页设计网站制作软件,microsoft office哪个可以创建网页?
如何快速搭建高效简练网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
建站主机无法访问?如何排查域名与服务器问题
建站主机SSH密钥生成步骤及常见问题解答?
广德云建站网站建设方案与建站流程优化指南
如何通过云梦建站系统实现SEO快速优化?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何在搬瓦工VPS快速搭建网站?
免费视频制作网站,更新又快又好的免费电影网站?
已有域名如何快速搭建专属网站?
建站主机CVM配置优化、SEO策略与性能提升指南
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
如何确认建站备案号应放置的具体位置?
如何快速搭建虚拟主机网站?新手必看指南
建站之星如何助力网站排名飙升?揭秘高效技巧
网站制作新手教程,新手建设一个网站需要注意些什么?
开封网站制作公司,网络用语开封是什么意思?
如何访问已购建站主机并解决登录问题?
开心动漫网站制作软件下载,十分开心动画为何停播?
图册素材网站设计制作软件,图册的导出方式有几种?
盐城做公司网站,江苏电子版退休证办理流程?
焦点电影公司作品,电影焦点结局是什么?
,南京靠谱的征婚网站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
建站主机如何选?高性价比方案全解析
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
c# 在高并发场景下,委托和接口调用的性能对比
如何通过wdcp面板快速创建网站?
高防服务器租用指南:配置选择与快速部署攻略
如何用景安虚拟主机手机版绑定域名建站?
深圳网站制作的公司有哪些,dido官方网站?
如何在云服务器上快速搭建个人网站?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何通过虚拟主机快速搭建个人网站?
宁波免费建站如何选择可靠模板与平台?
盘锦网站制作公司,盘锦大洼有多少5G网站?
装修招标网站设计制作流程,装修招标流程?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。