java--think in java 检测工程目录列表

来源:互联网 发布:农村淘宝拿快递要钱吗 编辑:程序博客网 时间:2024/06/05 18:12

think in java 第四版 第18.1.1章节,列出了3套代码,来表示一个功能的三种实现。

三种不同的实现,对代码进行了不同程度压缩。


代码:

package io;//: io/DirList.java// Display a directory listing using regular expressions.// {Args: "D.*\.java"}import java.util.regex.*;import java.io.*;import java.util.*;public class DirList {  public static void main(String[] args) {    File path = new File(".");    String[] list;    if(args.length == 0)      list = path.list();    else      list = path.list(new DirFilter(args[0]));    Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);    for(String dirItem : list)      System.out.println(dirItem);  }}class DirFilter implements FilenameFilter {  private Pattern pattern;  public DirFilter(String regex) {    pattern = Pattern.compile(regex);  }  public boolean accept(File dir, String name) {    return pattern.matcher(name).matches();  }} /* Output:DirectoryDemo.javaDirList.javaDirList2.javaDirList3.java*///:~

package io;//: io/DirList2.java// Uses anonymous inner classes.// {Args: "D.*\.java"}import java.util.regex.*;import java.io.*;import java.util.*;public class DirList2 {  public static FilenameFilter filter(final String regex) {    // Creation of anonymous inner class:    return new FilenameFilter() {      private Pattern pattern = Pattern.compile(regex);      public boolean accept(File dir, String name) {        return pattern.matcher(name).matches();      }    }; // End of anonymous inner class  }  public static void main(String[] args) {    File path = new File(".");    String[] list;    if(args.length == 0)      list = path.list();    else      list = path.list(filter(args[0]));    Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);    for(String dirItem : list)      System.out.println(dirItem);  }} /* Output:DirectoryDemo.javaDirList.javaDirList2.javaDirList3.java*///:~

在list方法使用匿名内部类作为方法的参数。

优点:代码隔离、聚拢于一点。

缺点:不易阅读。

package io;//: io/DirList3.java// Building the anonymous inner class "in-place."// {Args: "D.*\.java"}import java.util.regex.*;import java.io.*;import java.util.*;public class DirList3 {  public static void main(final String[] args) {    File path = new File(".");    String[] list;    if(args.length == 0)      list = path.list();    else      list = path.list(new FilenameFilter() {        private Pattern pattern = Pattern.compile(args[0]);        public boolean accept(File dir, String name) {          return pattern.matcher(name).matches();        }      });    Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);    for(String dirItem : list)      System.out.println(dirItem);  }} /* Output:DirectoryDemo.javaDirList.javaDirList2.javaDirList3.java*///:~