日期:2014-05-20  浏览次数:20805 次

求thing in java第4版第18章练习6的答案
求大神发个求thing in java第4版第18章练习6的答案
------解决方案--------------------
主方法类Test.java:

import java.io.*;

public class Test {

    public interface Strategy {

        void process(File file);
    }
    private Strategy strategy;
    private String ext;

    public Test(Strategy strategy, String ext) {
        this.strategy = strategy;
        this.ext = ext;
    }

    public void start(String[] args) {
        try {
            if (args.length == 0) {
                processDirectoryTree(new File("."));
            } else {
                for (String arg : args) {
                    File fileArg = new File(arg);
                    if (fileArg.isDirectory()) {
                        processDirectoryTree(fileArg);
                    } else {
                        // Allow user to leave off extension:
                        if (!arg.endsWith("." + ext)) {
                            arg += "." + ext;
                        }
                        strategy.process(
                                new File(arg).getCanonicalFile());
                    }
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public void
            processDirectoryTree(File root) throws IOException {
        for (File file : Directory.walk(
                root.getAbsolutePath(), ".*\\." + ext)) {
            strategy.process(file.getCanonicalFile());
        }
    }

    // Demonstration of how to use it:
    public static void main(String[] args) {
        new Test(new Test.Strategy() {
            public void process(File file) {
                System.out.println(file);
            }
        }, "java").start(args);
    }
} /* (Execute to see output) *///:~

Directory.java

import java.util.regex.*;
import java.io.*;
import java.util.*;

public final class Directory {

    public static File[]
            local(File dir, final String regex) {
        return dir.listFiles(new FilenameFilter() {
            private Pattern pattern = Pattern.compile(regex);