package javacodebook.regex.filenamefilter; import java.io.*; /** * Ein FileVisitor, der den Namen von allen Dateien ausgibt, für * die er aufgerufen wird. */ public class PrintFilenameVisitor implements javacodebook.io.dirtree.FileVisitor { /** Verarbeitet ein Verzeichnis */ public void visitDirectory(File f) throws IOException { } /** Verarbeitet eine Datei */ public void visitFile(File f) throws IOException { System.out.println(f.getAbsolutePath()); } } --- Neue Klasse --- package javacodebook.regex.filenamefilter; import java.io.File; import java.util.regex.*; /** * Ein FilenameFilter, der anhand eines regulären Ausdrucks * überprüft, ob ein Dateiname dem gesuchten Namensschema * entspricht. */ public class RegexFilenameFilter implements java.io.FilenameFilter { //Der reguläre Ausdruck in kompilierter Form Pattern pattern = null; /** * Erzeugt einen neuen RegexFilenameFilter mit dem * angegebenen regulären Ausdruck. */ public RegexFilenameFilter(String regexStr) { pattern = Pattern.compile(regexStr); } /** * Testet, ob ein angegebener Dateiname dem regulären Ausdruck genügt. * @param dir Das Verzeichnis, in dem die Datei gefunden wurde * @param name Der Name der Datei * @return true, wenn der Dateiname dem Ausdruck genügt. */ public boolean accept(File dir, String name) { Matcher matcher = pattern.matcher(name); boolean accepted = matcher.matches(); return accepted; } } --- Neue Klasse --- package javacodebook.regex.filenamefilter; import java.io.*; import javacodebook.io.dirtree.FileTreeWalker; /** * Eine einfache Klasse zur Demonstration des RegexFilenameFilters. */ public class Starter { public static void main(String[] args) throws IOException { if(args.length < 2) printUsage(); File f = new File(args[0]); if(!f.exists() || ! f.isDirectory()) printUsage(); RegexFilenameFilter filter = new RegexFilenameFilter(args[1]); PrintFilenameVisitor visitor = new PrintFilenameVisitor(); FileTreeWalker walker = new FileTreeWalker(f, visitor, filter); walker.start(); } private static void printUsage() { System.out.print("Benutzung: java javacodebook."); System.out.print("regex.filenamefilter.Starter "); System.out.print("Ausgangsverzeichnis RegEx"); return; } }