zoukankan      html  css  js  c++  java
  • 目录列表器

    1.获取目录列表, 可以用两种方法使用File对象. (list()方法带参数和不带参数)

    package com.zachary.file;
    
    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.Arrays;
    import java.util.regex.Pattern;
    
    /**
     * 目录列表器
     * @author Zachary.Zheng
     * @version 1.0
     * @date 2019年11月9日
     */
    public class DirList {
        // {Args: DirList2.java DirList.java}
        public static void main(String[] args) {
            File path = new File("src/com/zachary/io/util");
            String[] list;
            if (args.length == 0) {
                // 不带参数的list()方法, 获得file对象的全部列表
                list = path.list();
                for (String dirItem : list) {
                    System.out.println(dirItem);
                }
            } else {
                System.out.println(path.getName());
                System.out.println(path.list());
                /*
                 * 1. 回调函数. 
                 * 2. 更具体的说, 就是一个策略模式的例子. 
                 * 3. 这里的回调函数用于过滤得到想要的文件
                 */
                list = path.list(new DirFilter(args[0]));
                Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
                System.out.println("========================");
                PPrint.pprint(list);
                PPrint.pprint(list);
                System.out.println("========================");
                for (String dirItem : list) {
                    System.out.println(dirItem);
                }
                System.out.println("========================");
                // 回调函数. 更具体的说, 就是一个策略模式的例子
                list = path.list(new DirFilter(args[1]));
                Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
                for (String dirItem : list) {
                    System.out.println(dirItem);
                }
            }
        }
    }
    
    class DirFilter implements FilenameFilter {
        /**
         * java与正则相关的工具主要在java.util.regex包中;此包中主要有两个类:Pattern、Matcher。
         * Pattern 
         * 声明:public final class Pattern  implements java.io.Serializable
         * Pattern类有final 修饰,可知他不能被子类继承。
         * 含义:模式类,正则表达式的编译表示形式。
         * 注意:此类的实例是不可变的,可供多个并发线程安全使用。
         */
        private Pattern pattern;
    
        public DirFilter(String regex) {
            pattern = Pattern.compile(regex);
        }
    
        @Override
        public boolean accept(File dir, String name) {
            return pattern.matcher(name).matches();
        }
    }

    2.匿名内部类

    package com.zachary.file;
    
    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.Arrays;
    import java.util.regex.Pattern;
    
    /**
     * @author Zachary.Zheng
     * @version 1.0
     * @date 2019年11月9日
     */
    public class DirList2 {
        // 参数是final, 这在内部类中是必需的, 这样才能够使用来自该范围之外的对象
        public static FilenameFilter filter(final String regex) {
            // 过滤获得指定类型的文件
            return new FilenameFilter() {
                private Pattern pattern = Pattern.compile(regex);
    
                @Override
                public boolean accept(File dir, String name) {
                    return pattern.matcher(name).matches();
                }
            }; // 末尾必须要有分号
        }
    
        // {Args: DirList2.java DirList.java}
        public static void main(String[] args) {
            File path = new File("src/com/zachary/io/util");
            String[] list;
            if (args.length == 0) {
                list = path.list();
                for (String dirItem : list) {
                    System.out.println(dirItem);
                }
            } else {
                list = path.list(filter(args[0]));
                Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
                for (String dirItem : list) {
                    System.out.println(dirItem);
                }
                System.out.println("========================");
                list = path.list(filter(args[1]));
                Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
                for (String dirItem : list) {
                    System.out.println(dirItem);
                }
            }
        }
    }
    /*
    DirList2.java 
    ======================== 
    DirList.java
    *///:~

    3.进一步改进, 因为现在FilenameFilter类紧密的和DirList2绑定在一起. 定义一个作为list()参数的匿名内部类. 使程序变的更小.

    package com.zachary.file;
    
    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.Arrays;
    import java.util.regex.Pattern;
    
    /**
     * @author Zachary.Zheng
     * @version 1.0
     * @date 2019年11月9日
     */
    public class DirList3 {
        public static void main(String[] args) {
            File path = new File("src/com/zachary/io/util");
            String[] list;
            if (args.length == 0) {
                list = path.list();
                for (String dirItem : list) {
                    System.out.println(dirItem);
                }
            } else {
                list = path.list(new FilenameFilter() {
                    private Pattern pattern = Pattern.compile(args[0]);
    
                    @Override
                    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);
                }
            }
        }
    }
  • 相关阅读:
    学期总结
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言博客作业04
    C语言I博客作业03
    C语言I博客作业02
    C语言I博客作业01
    学期总结
  • 原文地址:https://www.cnblogs.com/zhongli1/p/11831920.html
Copyright © 2011-2022 走看看