欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java IO文件過濾器對命令設(shè)計模式的使用

 更新時間:2017年06月08日 09:56:36   投稿:mrr  
java io流里面使用到了很多的設(shè)計模式,最典型的就是裝飾模式,還有命令模式,下面分兩部分來講Java IO文件過濾器對命令設(shè)計模式的使用,一起看看吧

一. 點睛

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

二. 示例

我們進(jìn)行java編程的時候,如果想要訪問文件或者目錄,會使用File類,F(xiàn)ile是一個很強(qiáng)大的類,不管文件還是目錄都可以使用它。如果要遍歷文件會使用到File類的list()方法,它會列出當(dāng)前File對象的所有子文件名和路徑名,如果有的文件名或者路徑名不想要列出來怎么辦?File類給提供了另外一個重載的具有過濾功能的方法list(FilenameFilter filter)可以滿足我們的需要,方法聲明如下:

public String[] list(FilenameFilter filter);

參數(shù)里面的FilenameFilter就是文件名過濾接口,該接口有一個方法accept()方法,我們自定義的文件名過濾器需要實現(xiàn)該接口,并實現(xiàn)accept()方法來自定義規(guī)則。FilenameFilter接口聲明如下所示:

public interface FilenameFilter {
 boolean accept(File dir, String name);
}

下面來看具體怎么使用的,含義為列出當(dāng)前工作空間下所有以.xml結(jié)尾的文件名或者路徑名。

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結(jié)尾則符合條件返回true
  return name.endsWith(".xml");
 }
}

2. 編寫測試類

package org.light4j.io.fileFilter;
import java.io.File;
/**
 * 文件過濾器測試
 * 
 * <p>
 * 列出當(dāng)前工作目錄下符合條件的所有子文件名和路徑名
 * </p>
 * 
 * @author longjiazuo
 * 
 */
public class FilenameFilterTest {
 public static void main(String[] args) {
  // 獲取工作目錄
  String workDir = System.getProperty("user.dir");
  File file = new File(workDir);
  // 列舉當(dāng)前工作目錄下的所有文件
  String[] files = file.list(new MyFilenameFilter());
  // 循環(huán)遍歷
  for (String string : files) {
   System.out.println(string);
  }
 }
}

運行上面代碼可以在控制臺看到只列出以.xml結(jié)尾的文件名或者路徑名。

三. 命令設(shè)計模式

命令模式是關(guān)于如何處理一個對象請求另外一個對象調(diào)用其方法完成某項功能的設(shè)計模式,當(dāng)一個對象請求另外一個對象調(diào)用其方法時,并不和被請求的對象直接交互,而是把這種請求封裝到一個命令對象中,具體做法是將請求封裝在命令對象的一個方法里,將命令對象作為參數(shù)傳遞。命令模式的核心就是使用命令對象來封裝方法的調(diào)用。

在項目中,我們不會只有一個類,所以經(jīng)常涉及一個對象請求另外一個對象調(diào)用它的方法來達(dá)到某種目的。如果請求者這時候不希望或者無法直接和被請求者進(jìn)行交互,換句話說就是請求者不包含被請求者的引用,那么這個時候二者如何進(jìn)行交互?我們可以使用命令模式來達(dá)到目的。例如,我們?nèi)粘|c外賣,我們并不直接和飯店打交道,而是會上美團(tuán)等外賣網(wǎng)站購買,外賣網(wǎng)站會把你要買外賣的請求作為一個點餐命令告訴飯店,只要該點餐命令被成功傳遞給飯店,你就一定能夠收到外賣。

現(xiàn)在回到文件過濾器的使用上面來,F(xiàn)ile類的list(FilenameFilter filter)方法通過使用一個接口對象作為參數(shù)來實現(xiàn)過濾文件名的功能,具體的規(guī)則定義則是在FilenameFilter接口子類的方法accept()里面來實現(xiàn)的,這就是對命令設(shè)計模式的使用。

按道理,既然list(FilenameFilter filter)方法想要一個判斷哪些文件需要被列出來的規(guī)則,那我們把規(guī)則傳進(jìn)去就行了,這個規(guī)則是一個代碼塊,但是目前的java并不支持向方法里面?zhèn)魅氪a塊的做法,所以java使用了FilenameFilter的accept()方法來封裝判斷規(guī)則,傳入的MyFilenameFilter對象的作用其實是為了傳入accept()方法的方法體,這個方法體的作用就是判斷哪些文件名或者路徑名符合規(guī)則,list(FilenameFilter filter)的實現(xiàn)源碼如下所示:

四. 源代碼示例

github地址:點擊查看

碼云地址:點擊查看

以上所述是小編給大家介紹的Java IO文件過濾器對命令設(shè)計模式的使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • jasypt SaltGenerator接口定義方法源碼解讀

    jasypt SaltGenerator接口定義方法源碼解讀

    這篇文章主要為大家介紹了jasypt SaltGenerator接口定義方法源碼解讀,,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • JAVA多線程實現(xiàn)生產(chǎn)者消費者的實例詳解

    JAVA多線程實現(xiàn)生產(chǎn)者消費者的實例詳解

    這篇文章主要介紹了JAVA多線程實現(xiàn)生產(chǎn)者消費者的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解Java中使用泛型實現(xiàn)快速排序算法的方法

    詳解Java中使用泛型實現(xiàn)快速排序算法的方法

    這篇文章主要介紹了Java中使用泛型實現(xiàn)快速排序算法的方法,快速排序的平均時間復(fù)雜度為(n\log n),文中的方法立足于基礎(chǔ)而并沒有考慮優(yōu)化處理,需要的朋友可以參考下
    2016-05-05
  • java集合中l(wèi)ist的用法代碼示例

    java集合中l(wèi)ist的用法代碼示例

    這篇文章主要介紹了java集合中l(wèi)ist的用法代碼示例,分享了相關(guān)代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java多線程讀取多個文件的方法

    java多線程讀取多個文件的方法

    這篇文章主要為大家詳細(xì)介紹了java多線程讀取多個文件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java中Spring的創(chuàng)建和使用詳解

    Java中Spring的創(chuàng)建和使用詳解

    這篇文章主要介紹了Java中Spring的創(chuàng)建和使用詳解,Spring 是?個包含了眾多?具?法的 IoC 容器,既然是容器那么 它就具備兩個最基本的功能,將對象存儲到容器中,從容器中將對象取出來,需要的朋友可以參考下
    2023-08-08
  • 解決springboot項目打成jar包后運行時碰到的小坑

    解決springboot項目打成jar包后運行時碰到的小坑

    這篇文章主要介紹了解決springboot項目打成jar包后運行時碰到的小坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java環(huán)境配置原理全面解析

    Java環(huán)境配置原理全面解析

    下面小編就為大家?guī)硪黄狫ava環(huán)境配置原理全面解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • RestTemplate實現(xiàn)多種底層HTTP客戶端類庫的切換用法

    RestTemplate實現(xiàn)多種底層HTTP客戶端類庫的切換用法

    這篇文章主要為大家詳細(xì)的講解了RestTemplate實現(xiàn)多種底層HTTP客戶端類庫的切換示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-03-03
  • java開發(fā)微信分享到朋友圈功能

    java開發(fā)微信分享到朋友圈功能

    這篇文章主要為大家詳細(xì)介紹了java開發(fā)微信發(fā)送給朋友和分享到朋友圈功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評論