首頁 >Java >java教程 >總結Java IO檔案過濾器的使用介紹

總結Java IO檔案過濾器的使用介紹

零下一度
零下一度原創
2017-06-17 13:55:591923瀏覽

java io流裡面使用到了很多的設計模式,最典型的就是裝飾模式,還有指令模式,下面分成兩部分來講Java IO檔過濾器對命令設計模式的使用,一起看看吧

一. 點睛

##java io流裡面使用到了很多的設計模式,最典型的就是裝飾模式,還有指令模式。透過對檔案過濾器功能的簡單使用,可以一窺java io流對指令設計模式的典型使用。以下分兩部分來講,先舉例說說文件過濾器的簡單使用,再引申到它是如何使用到命令設計模式的,不會大篇幅講模式,對命令模式想做更深入的了解請參考其他資料。

二.範例

我們進行java

程式設計的時候,如果想要存取檔案或目錄,會使用File類,File是一個很強大的類,不管檔案或目錄都可以使用它。如果要遍歷檔案會使用到File類別的list()方法,它會列出目前File物件的所有子檔案名稱和路徑名,如果有的檔案名稱或路徑名稱不想要列出來怎麼辦?File類別給提供了另外一個重載的具有過濾功能的方法list(FilenameFilter filter)可以滿足我們的需要,方法聲明如下:

public String[] list(FilenameFilter filter);

參數裡面的FilenameFilter就是文件名過濾接口,該接口有一個方法accept()方法,我們自訂的檔案名稱過濾器需要實作該接口,並實作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結尾的檔名或路徑名。

三.指令設計模式

指令模式是關於如何處理一個物件請求另外一個物件呼叫其方法完成某項功能的設計模式,當一個物件請求另外一個物件呼叫其方法時,並不和被請求的物件直接交互,而是把這種請求封裝到一個命令物件中,具體做法是將請求封裝在命令物件的一個方法裡,將命令物件作為參數傳遞。命令模式的核心就是使用命令物件來封裝方法的呼叫。

在專案中,我們不會只有一個類,所以經常涉及一個物件請求另外一個物件呼叫它的方法來達到某種目的。如果請求者這時候不希望或無法直接和被請求者進行交互,換句話說就是請求者不包含被請求者的

引用,那麼這個時候二者如何進行交互?我們可以使用指令模式來達到目的。例如,我們日常點外賣,我們不直接和飯店打交道,而是會上美團等外賣網站購買,外賣網站會把你要買外賣的請求作為一個點餐命令告訴飯店,只要該點餐命令被成功傳遞給飯店,你一定能夠收到外帶。

現在回到檔案過濾器的使用上面來,File類別的list(FilenameFilter filter)方法透過使用一個介面物件作為參數來實現過濾檔案名稱的功能,具體的規則定義則是在FilenameFilter接口子類別的方法accept()裡面來實現的,這就是指令設計模式的使用。

按道理,既然list(FilenameFilter filter)方法想要一個判斷哪些檔案需要被列出來的規則,那我們把規則傳進去就行了,這個規則是一個程式碼區塊,但是目前的java並不支援向方法裡面傳入程式碼區塊的做法,所以java使用了FilenameFilter的accept()方法來封裝判斷規則,傳入的MyFilenameFilter物件的作用其實是為了傳入accept()方法的方法體,這個方法體的作用就是判斷哪些檔案名稱或路徑名稱符合規則,list(FilenameFilter filter)的實作原始碼如下所示:

以上是總結Java IO檔案過濾器的使用介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn