Java IO Flow utilise de nombreux modèles de conception, le plus typique est le mode décoration et le mode commande Ce qui suit est divisé en deux parties pour parler des fichiers Java IO. Jetons un coup d'œil à l'utilisation du filtre sur le modèle de conception de commande
1. Le point fort
Java io flow est beaucoup utilisé. Les modes de conception les plus courants sont le mode décoration et le mode commande. Grâce à une simple utilisation de la fonction de filtre de fichiers, vous pouvez avoir un aperçu de l'utilisation typique du modèle de conception de commande par les flux Java IO. Ce qui suit est divisé en deux parties. Tout d'abord, je vais donner un exemple d'utilisation simple du filtre de fichiers, puis je l'étendrai à la façon dont il utilise le modèle de conception de commande. Si vous souhaitez avoir une compréhension plus approfondie du modèle de commande, veuillez vous référer à d'autres articles.
2. Exemple
Lorsque nous faisons de la programmation Java, si nous voulons accéder à des fichiers ou des répertoires, nous le ferons utilisez la classe File, File est une classe très puissante qui peut être utilisée quels que soient les fichiers ou les répertoires. Si vous souhaitez parcourir des fichiers, vous utiliserez la méthode list() de la classe File. Elle répertoriera tous les noms de sous-fichiers et les noms de chemin de l'objet File actuel. Que faire si certains noms de fichiers ou noms de chemin ne veulent pas l'être. répertorié ? La classe File fournit Une autre liste de méthodes surchargée (filtre FilenameFilter) avec fonction de filtrage peut répondre à nos besoins. La méthode est déclarée comme suit :
public String[] list(FilenameFilter filter);
Le FilenameFilter dans le paramètre est l'interface de filtrage des noms de fichiers, qui a une méthode accept(), notre filtre de nom de fichier personnalisé doit implémenter cette interface et implémenter la méthode accept() pour personnaliser les règles. La déclaration de l'interface FilenameFilter est la suivante :
public interface FilenameFilter { boolean accept(File dir, String name); }
Voyons comment l'utiliser. Cela signifie lister tous les noms de fichiers ou noms de chemin se terminant par .xml dans l'espace de travail actuel.
1. Écrivez un filtre de fichier personnalisé :
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. Écrivez une classe de test
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); } } }
En exécutant le code ci-dessus, vous pouvez voir sur la console que seuls les noms de fichiers ou les noms de chemin se terminant par .xml sont répertoriés.
3. Modèle de conception de commande
Le modèle de commande explique comment gérer un objet demandant à un autre objet d'appeler sa méthode pour terminer un certain mode fonction, lorsqu'un objet demande à un autre objet d'appeler sa méthode, il n'interagit pas directement avec l'objet demandé, mais encapsule la requête dans un objet de commande. La méthode spécifique consiste à encapsuler la requête dans une méthode de l'objet de commande. , en passant l'objet de commande en tant que paramètre. Le cœur du modèle de commande consiste à utiliser des objets de commande pour encapsuler les appels de méthode.
Dans un projet, nous n'aurons pas qu'une seule classe, cela implique donc souvent qu'un objet demande à un autre objet d'appeler sa méthode pour atteindre un certain objectif. Si le demandeur ne veut pas ou ne peut pas interagir directement avec le demandé à ce moment-là, en d'autres termes, le demandeur ne contient pas la référence du demandé, alors comment les deux peuvent-ils interagir à ce moment-là ? modèle de commandement pour atteindre l’objectif. Par exemple, lorsque nous commandons des plats à emporter tous les jours, nous ne traitons pas directement avec le restaurant, mais allons sur un site Web de plats à emporter tel que Meituan pour acheter. Le site Web de plats à emporter indiquera au restaurant votre demande d'achat de plats à emporter en tant que commande, à condition que ce soit le cas. dès que la commande est réussie, transmettez-la au restaurant et vous serez sûr de recevoir des plats à emporter.
Revenons maintenant à l'utilisation des filtres de fichiers, la méthode list (filtre FilenameFilter) de la classe File implémente la fonction de filtrage des noms de fichiers en utilisant un objet d'interface comme paramètre. La définition de la règle spécifique se trouve dans FilenameFilter. interface Ceci est implémenté dans la méthode accept() de la sous-classe. Il s'agit de l'utilisation du modèle de conception de commande.
Logiquement, puisque la méthode list(FilenameFilter filter) veut qu'une règle détermine quels fichiers doivent être répertoriés, alors nous pouvons simplement transmettre la règle. Cette règle est un bloc de code, mais le Java actuel ne le fait pas. Il ne prend pas en charge la transmission de blocs de code dans la méthode, donc Java utilise la méthode accept() de FilenameFilter pour encapsuler les règles de jugement. La fonction de l'objet MyFilenameFilter transmis est en fait de transmettre le corps de la méthode accept(). Ce corps de méthode La fonction est de déterminer quels noms de fichiers ou noms de chemin sont conformes aux règles. Le code source d'implémentation de list (filtre FilenameFilter) est le suivant :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!