Java IO フローでは多くの デザイン パターン が使用されます。最も一般的なものは、デコレーション モードと コマンド モード です。以下では、Java IO ファイルフィルターでのコマンド デザイン パターンの使用について説明します。 、見てみましょう 見てみましょう
1. 最後の仕上げ
Java io フローでは多くのデザイン パターンが使用されますが、最も一般的なのはデコレーション モードとコマンド モードです。ファイル フィルター機能を簡単に使用することで、Java IO ストリームによるコマンド設計パターンの一般的な使用法を垣間見ることができます。以下は 2 つの部分に分かれており、最初にファイル フィルターの簡単な使用例を示し、次にコマンド設計パターンの使用方法について説明します。パターンについては詳しく説明しません。コマンドパターンをより深く理解したい場合は、他の記事の資料を参照してください。
2. 例
Javaプログラミングを行う場合、ファイルまたはディレクトリにアクセスしたい場合、File クラスを使用します。ディレクトリ。ファイルをトラバースしたい場合は、File クラスの list() メソッドを使用します。これにより、現在の File オブジェクトのすべてのサブファイル名とパス名がリストされます。 File クラスは、フィルター機能を備えた別のオーバーロードされたメソッド リスト (FilenameFilter フィルター) を提供します。メソッドは次のように宣言されます:
public String[] list(FilenameFilter filter);
このインターフェイスには、ファイル名フィルター インターフェイスがあります。 () メソッドがあります。定義されたファイル名フィルターは、このインターフェイスを実装し、ルールをカスタマイズするために accept() メソッドを実装する必要があります。 FilenameFilter インターフェイスの宣言は次のとおりです:
public interface FilenameFilter { boolean accept(File dir, String name); }
使用方法を見てみましょう。これは、現在のワークスペース内の .xml で終わるすべてのファイル名またはパス名を一覧表示することを意味します。
1. カスタム ファイル フィルターを作成します:
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. テスト クラスを作成します
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); } } }
上記のコードを実行すると、.xml で終わるファイル名またはパス名のみがリストされることがコンソールに表示されます。 。
3. コマンド設計パターン
コマンドパターンは、あるオブジェクトが別のオブジェクトにそのメソッドの呼び出しを要求するときに、そのメソッドの呼び出しを要求するオブジェクトをどのように処理するかについての設計パターンです。リクエストされたオブジェクトと直接やり取りするのではなく、リクエストをコマンド オブジェクトにカプセル化します。具体的な方法は、リクエストをコマンド オブジェクトのメソッドにカプセル化し、コマンド オブジェクトをパラメータとして渡すことです。コマンド パターンの中核は、コマンド オブジェクトを使用してメソッド呼び出しをカプセル化することです。
プロジェクトにはクラスが 1 つだけあるわけではないため、特定の目的を達成するために、あるオブジェクトが別のオブジェクトにそのメソッドの呼び出しを要求することがよくあります。現時点でリクエスタがリクエスタと直接対話することを望まない、またはできない場合、つまりリクエスタにリクエスタの reference が含まれていない場合、この時点で 2 人はどのように対話できるでしょうか?目的を達成するため。例えば、私たちが毎日テイクアウトを注文する場合、レストランと直接取引するのではなく、美団などのテイクアウトサイトにアクセスして購入します。テイクアウトサイトは、注文の際に限り、テイクアウトの希望をレストランに伝えます。注文が成功したのでそれをレストランに渡すと、確実にテイクアウトが受けられます。
ここでファイル フィルターの使用に戻ります。File クラスのリスト (FilenameFilter フィルター) メソッドは、インターフェイス オブジェクトをパラメーターとして使用してファイル名をフィルターする機能を実装します。具体的なルールの定義は、FilenameFilter インターフェイスのメソッド内にあります。サブクラス これは、コマンド設計パターンの使用である accept() で実装されます。
論理的には、 list(FilenameFilter filter) メソッドはどのファイルをリストする必要があるかを決定するルールを必要としているため、ルールを渡すだけで済みます。 このルールはコード ブロックですが、現在の Java はこのメソッドをサポートしていません。コードブロックが渡されるため、Java は FilenameFilter の accept() メソッドを使用して判定ルールをカプセル化します。実際には、渡される MyFilenameFilter オブジェクトの関数は、この accept() メソッドのメソッド本体に渡されます。メソッド本体がどのファイル名またはパス名がルールに適合しているかを判定する list(FilenameFilter フィルタ) の実装ソースコードは次のとおりです。
以上がJava IO ファイルフィルタの使用概要の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。