一. 点睛

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文件过滤器实现按条件筛选文件
# 自定义
# 另外一个
# 是一个
# 方法来
# 遍历
# 点击查看
# 请求者
# 所示
# 来实现
# 小编
# 符合条件
# 目录下
# 你就
# 子类
# 在此
# 这就是
# 则是
# 它是
# 把你
# 给大家
相关文章:
建站之星安装后如何配置SEO及设计样式?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
宝塔面板如何快速创建新站点?
建站VPS选购需注意哪些关键参数?
长沙企业网站制作哪家好,长沙水业集团官方网站?
北京制作网站的公司,北京铁路集团官方网站?
如何通过山东自助建站平台快速注册域名?
如何在建站主机中优化服务器配置?
网站制作新手教程,新手建设一个网站需要注意些什么?
金*站制作公司有哪些,金华教育集团官网?
建站之星如何一键生成手机站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
建站之星官网登录失败?如何快速解决?
山东云建站价格为何差异显著?
如何在建站之星网店版论坛获取技术支持?
建站之星如何快速生成多端适配网站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
北京企业网站设计制作公司,北京铁路集团官方网站?
建站主机是什么?如何选择适合的建站主机?
如何快速上传自定义模板至建站之星?
如何在七牛云存储上搭建网站并设置自定义域名?
高性价比服务器租赁——企业级配置与24小时运维服务
建站主机选虚拟主机还是云服务器更好?
电商网站制作价格怎么算,网上拍卖流程以及规则?
宝塔Windows建站如何避免显示默认IIS页面?
宁波自助建站系统如何快速打造专业企业网站?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
如何在万网自助建站中设置域名及备案?
建站之星如何实现PC+手机+微信网站五合一建站?
如何通过免费商城建站系统源码自定义网站主题与功能?
个人网站制作流程图片大全,个人网站如何注销?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
建站之星代理如何优化在线客服效率?
网站网页制作专业公司,怎样制作自己的网页?
成都网站制作报价公司,成都工业用气开户费用?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何注册花生壳免费域名并搭建个人网站?
建站之星上传入口如何快速找到?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何在香港免费服务器上快速搭建网站?
如何高效生成建站之星成品网站源码?
建站之星安装提示数据库无法连接如何解决?
小建面朝正北,A点实际方位是否存在偏差?
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何快速搭建自助建站会员专属系统?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
,巨量百应是干嘛的?
*请认真填写需求信息,我们会在24小时内与您取得联系。