Der Java-IO-Flow verwendet viele Designmuster, das typischste ist der Dekorationsmodus und der Befehlsmodus. Das Folgende ist in zwei Teile unterteilt, um über Java-IO-Dateien zu sprechen Werfen wir einen Blick auf die Verwendung des Filters im Befehlsentwurfsmuster
1. Das Highlight
Java io Flow wird häufig verwendet. Die typischsten Designmodi sind der Dekorationsmodus und der Befehlsmodus. Durch die einfache Verwendung der Dateifilterfunktion erhalten Sie einen Einblick in die typische Verwendung des Befehlsentwurfsmusters durch Java IO-Streams. Das Folgende ist in zwei Teile gegliedert. Zuerst werde ich ein Beispiel für die einfache Verwendung des Dateifilters geben und es dann auf die Verwendung des Befehlsentwurfsmusters erweitern Wenn Sie ein tieferes Verständnis des Befehlsmusters haben möchten, lesen Sie bitte andere Artikel.
2. Beispiel
Wenn wir Javaprogrammieren, werden wir auf Dateien oder Verzeichnisse zugreifen Verwenden Sie die File-Klasse. File ist eine sehr leistungsstarke Klasse, die unabhängig von Dateien oder Verzeichnissen verwendet werden kann. Wenn Sie Dateien durchlaufen möchten, verwenden Sie die list()-Methode der File-Klasse. Sie listet alle Unterdateinamen und Pfadnamen des aktuellen Dateiobjekts auf aufgeführt? Die File-Klasse bietet eine weitere überladene Methodenliste (FilenameFilter) mit Filterfunktion. Die Methode wird wie folgt deklariert:
public String[] list(FilenameFilter filter);
Der FilenameFilter im Parameter ist die Dateinamen-Filterschnittstelle. Unser benutzerdefinierter Dateinamenfilter muss diese Schnittstelle implementieren und die Methode Accept () implementieren, um die Regeln anzupassen. Die Deklaration der FilenameFilter-Schnittstelle lautet wie folgt:
public interface FilenameFilter { boolean accept(File dir, String name); }
Schauen wir uns an, wie man sie verwendet. Es bedeutet, alle Dateinamen oder Pfadnamen aufzulisten, die mit .xml im aktuellen Arbeitsbereich enden.
1. Schreiben Sie einen benutzerdefinierten Dateifilter:
package org.light4j.io.fileFilter; import java.io.File; import java.io.FilenameFilter; /** * 自定义文件名过滤器 * * @author longjiazuo * */ public class MyFilenameFilter implements FilenameFilter { @Override public boolean accept(File dir, String name) { // 如果文件以.xml结尾则符合条件返回true return name.endsWith(".xml"); } }
2. Schreiben Sie eine Testklasse
package org.light4j.io.fileFilter; import java.io.File; /** * 文件过滤器测试 * * <p> * 列出当前工作目录下符合条件的所有子文件名和路径名 * </p> * * @author longjiazuo * */ public class FilenameFilterTest { public static void main(String[] args) { // 获取工作目录 String workDir = System.getProperty("user.dir"); File file = new File(workDir); // 列举当前工作目录下的所有文件 String[] files = file.list(new MyFilenameFilter()); // 循环遍历 for (String string : files) { System.out.println(string); } } }
Wenn Sie den obigen Code ausführen, können Sie auf der Konsole sehen, dass nur Dateinamen oder Pfadnamen aufgelistet werden, die mit .xml enden.
3. Befehlsentwurfsmuster
Beim Befehlsmuster geht es darum, wie ein Objekt verarbeitet wird, indem ein anderes Objekt aufgefordert wird, seine Methode aufzurufen, um einen bestimmten Vorgang abzuschließen Im Funktionsmodus interagiert ein Objekt nicht direkt mit dem angeforderten Objekt, sondern kapselt die Anforderung in ein Befehlsobjekt. , wobei das Befehlsobjekt als Parameter übergeben wird. Der Kern des Befehlsmusters besteht darin, Befehlsobjekte zum Kapseln von Methodenaufrufen zu verwenden.
In einem Projekt werden wir nicht nur eine Klasse haben, daher geht es oft darum, dass ein Objekt ein anderes Objekt auffordert, seine Methode aufzurufen, um einen bestimmten Zweck zu erreichen. Wenn der Anforderer zu diesem Zeitpunkt nicht direkt mit dem Anforderer interagieren möchte oder kann, mit anderen Worten, der Anforderer enthält nicht die Referenz des Anforderers, wie können die beiden dann zu diesem Zeitpunkt interagieren? Befehlsmodell, um das Ziel zu erreichen. Wenn wir beispielsweise jeden Tag etwas zum Mitnehmen bestellen, verhandeln wir nicht direkt mit dem Restaurant, sondern gehen zum Einkaufen auf die Website zum Mitnehmen, z. B. Meituan. Die Website zum Mitnehmen teilt dem Restaurant Ihre Anfrage zum Mitnehmen als Bestellauftrag mit Sobald die Bestellung erfolgreich ist, geben Sie sie an das Restaurant weiter und Sie erhalten garantiert etwas zum Mitnehmen.
Nun zurück zur Verwendung von Dateifiltern: Die Listenmethode (FilenameFilter-Filter) der File-Klasse implementiert die Funktion zum Filtern von Dateinamen, indem sie ein Schnittstellenobjekt als Parameter verwendet. Die spezifische Regeldefinition befindet sich im FilenameFilter Schnittstelle Dies ist in der Methode „accept()“ der Unterklasse implementiert. Dies ist die Verwendung des Befehlsentwurfsmusters.
Logischerweise können wir die Regel einfach übergeben, da die Methode list(FilenameFilter filter) eine Regel benötigt, um zu bestimmen, welche Dateien aufgelistet werden müssen. Diese Regel ist ein Codeblock, das aktuelle Java tut dies jedoch nicht Die Übergabe von Codeblöcken an die Methode wird nicht unterstützt, daher verwendet Java die Methode „accept()“ von FilenameFilter, um die Beurteilungsregeln zu kapseln. Die Funktion des übergebenen MyFilenameFilter-Objekts besteht tatsächlich darin, den Methodenkörper der Methode „accept()“ zu übergeben . Die Funktion dieses Methodenkörpers besteht darin, zu bestimmen, welche Dateinamen oder Pfadnamen den Regeln entsprechen. Der Implementierungsquellcode von list(FilenameFilter) lautet wie folgt:
Das obige ist der detaillierte Inhalt vonZusammenfassung der Verwendung von Java IO-Dateifiltern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!