18.1.1 目录列表器
来源:互联网 发布:企业整站源码 编辑:程序博客网 时间:2024/05/17 22:12
一个利用FILE类获取文件列表的示例, 示例中利用过滤器实现了列表过滤
package com.cnsuning.src;import java.io.File;import java.io.FilenameFilter;import java.util.Arrays;import java.util.regex.Pattern;public class Main {public static void main(String[] args) {File dir = new File("D:\\download");String[] dirList;if(args.length==0){dirList = dir.list();}else{dirList = dir.list(new DirFilter(args[0]));}Arrays.sort(dirList,String.CASE_INSENSITIVE_ORDER);for(String fileName : dirList){System.out.println(fileName);}}}class DirFilter implements FilenameFilter{private Pattern pattern;DirFilter (String preg){pattern = Pattern.compile(preg);}@Overridepublic boolean accept(File file, String fileName) {// TODO Auto-generated method stubreturn pattern.matcher(fileName).matches();}}
命令好参数:[\w]*\.zip
结果:
AdbeRdr940_zh_CN.zip
JAVAAPI_CN.zip
qrcode.zip
SQLyogTrial.zip
特别的, 书中提到这里的list()和过滤器结合使用是一种命令模式的思想, list 在设计中是会接收一个FilenameFilter接口来实现文件列表过滤, 而具体的策略由用户实现接口来决定. 可见策略模式的核心思想是利用接口来实现, 通过暴露可编码接口给用户实现具体算法无关性的便利. 而策略这个词更多的体现的是应用场景, 说的是接口支持的一组策略这种场景, 体现了该设计的便利性和合理性.
上边的代码还可以改写为匿名内部类的实现方式
package com.cnsuning.src;import java.io.File;import java.io.FilenameFilter;import java.util.Arrays;import java.util.regex.Pattern;public class Main {public static void main(String[] args) {File dir = new File("D:\\download");String[] dirList;if(args.length==0){dirList = dir.list();}else{dirList = dir.list(getNameFilter(args[0]));}Arrays.sort(dirList,String.CASE_INSENSITIVE_ORDER);for(String fileName : dirList){System.out.println(fileName);}}public static FilenameFilter getNameFilter(final String regex){return new FilenameFilter(){Pattern namePattern = Pattern.compile(regex); //使用的外部变量必须为finalpublic boolean accept(File file,String fileName){return namePattern.matcher(fileName).matches();}};}}
更近一步的, 匿名内部类还可以做为参数出现
package com.cnsuning.src;import java.io.File;import java.io.FilenameFilter;import java.util.Arrays;import java.util.regex.Pattern;public class Main {public static void main(final String[] args) {File dir = new File("D:\\download");String[] dirList;if(args.length==0){dirList = dir.list();}else{dirList = dir.list(new FilenameFilter(){Pattern namePattern = Pattern.compile(args[0]); //使用的外部变量必须为finalpublic boolean accept(File file,String fileName){return namePattern.matcher(fileName).matches();}});}Arrays.sort(dirList,String.CASE_INSENSITIVE_ORDER);for(String fileName : dirList){System.out.println(fileName);}}}
在这个匿名内部类改写例子的基础上, 书中提到了匿名内部类应用在代码中的优缺点:
优点: 将解决特定问题的代码隔离, 聚拢在一点
缺点: 不易阅读(这个是显而易见的)
我觉得只要运用纯熟, 匿名内部类对编写特定代码还是很好的.
0 0
- 18.1.1 目录列表器
- 目录列表器
- java IO 目录列表器
- File类-目录列表器
- 目录列表
- File类中的目录列表器
- apache 2.4.1 配置网页目录与文件列表目录
- 读取目录列表
- eclipse 插件列表目录
- 目录列表自动生成
- 插件24:目录列表
- tomcat目录列表功能
- 目录列表的显示
- Apache禁止目录列表
- appscan漏洞--目录列表
- 博客目录列表
- 数字图像处理目录列表
- html创建目录列表
- android常用的开源库
- Java8 Lambda表达式教程
- 7.12 B - 广搜/深搜 基础 POJ 1979
- OCP 1Z0 053 155
- 关于UINavigationController
- 18.1.1 目录列表器
- JAVA8 十大新特性详解
- xcode编译错误总结
- [leetcode] Populating Next Right Pointers in Each Node II
- 写具有Objective-C特征的Swift类—Swift学习笔记(二十一)
- python抓取百度热词
- HTTP POST GET详解
- 紐巴倫 UPSSDv5jg
- 耐克官網 oRTTMd2qt