package edu.stanford.nlp.io; import java.io.FileFilter; import java.io.File; import java.util.regex.Pattern; /** Provides some static methods for combination file filters. * @author Christopher Manning */ public class FileFilters { private FileFilters() {} public static FileFilter conjunctionFileFilter(FileFilter a, FileFilter b) { return new ConjunctionFileFilter(a, b); } public static FileFilter negationFileFilter(FileFilter a) { return new NegationFileFilter(a); } public static FileFilter findRegexFileFilter(String regex) { return new FindRegexFileFilter(regex); } /** * Implements a conjunction file filter. */ private static class ConjunctionFileFilter implements java.io.FileFilter { private final FileFilter f1; private final FileFilter f2; /** * Sets up file filter. * * @param a One file filter * @param b The other file filter */ public ConjunctionFileFilter(FileFilter a, FileFilter b) { f1 = a; f2 = b; } /** * Checks whether a file satisfies the selection filter. * * @param file The file * @return true if the file is acceptable */ public boolean accept(File file) { return f1.accept(file) && f2.accept(file); } } /** * Implements a negation file filter. */ private static class NegationFileFilter implements java.io.FileFilter { private final FileFilter f1; /** * Sets up file filter. * * @param a A file filter */ public NegationFileFilter(FileFilter a) { f1 = a; } /** * Checks whether a file satisfies the selection filter. * * @param file The file * @return true if the file is acceptable */ public boolean accept(File file) { return ! f1.accept(file); } } /** * Implements a conjunction file filter. */ private static class FindRegexFileFilter implements java.io.FileFilter { private final Pattern p; /** * Sets up file filter. * * @param regex The pattern to match (as find() */ public FindRegexFileFilter(String regex) { p = Pattern.compile(regex); } /** * Checks whether a file satisfies the selection filter. * * @param file The file * @return true if the file is acceptable */ public boolean accept(File file) { return p.matcher(file.getName()).find(); } } }