Java之FileFilter過濾器的使用與及原理的簡單介紹

2020-12-23 彼岸end

各位小夥伴們大家好,在之前的文章中,小編介紹了「創作開運禮」Java之使用遞歸進行文件搜索,這次小編要介紹的是過濾器,我們可以使用過濾器來遍歷文件夾以及裡面的子文件夾還有相對應的文件。

在File類中有兩個和ListFiles重載的方法,方法的參數傳遞的就是過濾器。

1.File[] listFiles(FileFilter filter)

java.io.FileFilter接口:用於抽象路徑名(File對象)的過濾器。

作用:用來過濾文件(File對象)

抽象方法:用來過濾文件的方法

boolean accept(Filepathname)測試指定抽象路徑名是否應該包含在某個路徑名列表中。

參數:

File pathname:使用listFiles方法遍歷目錄,得到的每一個文件對象。

2.File[] listFiles(FilenameFilter filter)

java.io.FilenameFilter接口:實現此接口的類實例可用於過濾文件名

作用:用於過濾文件名稱

抽象方法:用來過濾文件的方法

boolean accept(File dir,String name)測試指定文件是否應該包含在某一文件列表中。

參數:

File dir:構造方法中傳遞的被遍歷的目錄

String name:使用ListFiles方法遍歷目錄,獲取的每一個文件夾/文件夾的名稱

注意:兩個過濾接口是沒有實現類的,需要我們自己寫實現類,重寫過濾的方法accept,在方法中自己定義過濾的規則

小編先來將第一種過濾器:File[] listFiles(FileFilter filter)

代碼如下(定義一個實現類):

import java.io.File;

import java.io.FileFilter;

/*創建過濾器FileFilter的實現類,重寫過濾方法accept,定義過濾規則*/

public class FileFilterImpl implements FileFilter {

public boolean accept(File pathname) {

//如果pathname是一個文件夾,返回true,繼續遍歷這個文件夾

/*過濾規則:

在accept方法中,判斷File對象是否以.pkt結尾

是,返回true

不是,返回false/*

if(pathname.isDirectory()) {

return true;

}

return pathname.getName().toLowerCase().endsWith(".pkt");

}

}

main方法

import java.io.File;

public class Demo01Filter {

public static void main(String args[]) {

File file=new File("D:\\programming\\Cisco Packet Tracer");

getAllFile(file);

}

/*定義一個方法,參數傳遞File類型的目錄

方法中對目錄進行遍歷*/

public static void getAllFile(File dir) {

File[] files=dir.listFiles(new FileFilterImpl());//傳遞過濾器對象

for(File f:files) {

//對遍歷得到的File對象f進行判斷,判斷是否是文件夾

if(f.isDirectory()) {

getAllFile(f);

}else {

System.out.println(f);

}

}

}

}

由上面的代碼可以知道,其實過濾器的使用只是根據之前的「創作開運禮」Java之遞歸列印多級目錄上面加上了實現類,之後在傳遞過濾器對象,File[] files=dir.listFiles(new FileFilterImpl());接下來,小編來講一下過濾器的原理

首先我們需要明白

過濾器中的accept方法是誰調用的。accept方法中的參數pathname是什麼File[] files=dir.listFiles(new FileFilterImpl());

我們先來說一下listFiles方法,一個做了三件事情

listFiles方法會對構造方法中傳遞的目錄進行遍歷,獲取目錄中每一個文件或者文件夾-->封裝成File對象listFiles方法會調用參數,把參數傳遞給過濾器的方法accept3.listFiles方法會把遍歷得到的每一個File對象,傳遞給accept方法的參數pathname。

過濾器原理

關於FileFilter過濾器的使用與及原理,其實簡單一點來講就是listFiles方法調用了accept方法,把遍歷的每一個File對象傳遞給accept方法的參數pathname,其實pathname就是File對象。然後這個實現類會自己定義規則,滿足條件的返回true,傳遞過去的對象會保存到數組中;否則返回false,傳遞過的對象不會保存到數組中,小編就先說到這裡,希望這篇文章可以幫到大家,也歡迎各位小夥伴補充和糾錯

圖像來自網絡,如有侵權,請聯繫作者刪除

相關焦點

  • Java之IO流的簡單介紹
    各位小夥伴們大家好,在之前的文章中小編簡單介紹了過濾器Java之FileFilter過濾器的使用與及原理的簡單介紹,「創作開運禮」Java之FileNameFilter過濾器的使用,這次小編要簡單介紹一下IO流,大家可以先看這張圖。
  • 板框過濾器的工作原理和使用特點?
    板框過濾器的工作原理和使用特點?適用於濃度50%以下粘度較低,含渣量較少的液體作密閉過濾以達到提純、澄清等精濾、半精濾的要求,直接選用微孔濾膜,可不經微孔膜過濾器直接達到無菌過濾之目的。
  • 機械過濾器,多介質過濾器設計原理介紹
    常用過濾器有石英砂、無煙煤、活性炭、磁鐵礦、開拓石榴石、陶瓷、塑料球等。 多介質過濾器(過濾床)採用兩種以上介質作為過濾層的介質過濾器。在工業循環水處理系統中,用於去除汙水中的雜質、吸附油等,使水質符合循環使用的要求。過濾的作用主要是清除水中的浮動或膠狀雜質,尤其是沉澱技術不能清除的微粒子和細菌等,對BOD和COD等也有一定程度的清除效果。
  • java之字符緩衝輸入流,BufferedReader的簡單介紹
    各位小夥伴們大家好,在之前的文章中,小編介紹了字符緩衝輸出流java之字符緩衝輸出流,BufferedWriter的簡單介紹,這次小編要介紹的是字符緩衝輸入流,具體如下:java.io.BufferedReader extends Reader繼承自父類的共性成員文件:int read()讀取單個字符並返回int read(char[] cbuf)一次讀取多個字符
  • 全屋前置過濾器有必要安裝嗎 過濾器工作原理是什麼
    過濾器工作原理是什麼?全屋前置過濾器有必要安裝嗎有,一般淨水機僅能滿足洗菜、做飯、直飲等用水需求,卻不能避免大顆粒雜質對熱水器、馬桶、洗碗機等涉水家電的危害。而前置過濾器搭配不同的淨水產品(中央淨水機、中央軟水機),對自來水進行多級過濾,更能保護衛浴、陽臺、廚房等不同場景的用水安全。
  • java之列印流,printStream的簡單介紹
    各位小夥伴們大家好,在之前的文章中小編介紹了序列化與反序列化的相關知識,這次小編要介紹的是列印流的一些概念還有使用,具體如下:java.io.PrintStream:列印流PrintStream為其他輸出流添加了功能,使它們能夠方便地列印各種數據值和表示形式
  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    寫這篇文章的目的是想總結一下自己這麼多年來使用java的一些心得體會,主要是和一些java基礎知識點相關的,所以也希望能分享給剛剛入門的Java程式設計師和打算入Java開發這個行當的準新手們,希望可以給大家一些經驗,能讓大家更好學習和使用Java。這次介紹的主要內容是和J2SE相關的部分,另外,會在以後再介紹些J2EE相關的、和Java中各個框架相關的內容。
  • Java枚舉(Enum)類型原理探求
    在這之前使用接口靜態常量來實現相關功能(也可以是類靜態常量),以季節為例:在不使用枚舉類之前,一般使用接口靜態常量實現。JUnit使用測試如下:@TestpublicvoidnoEnum(){ int i = 1; Assert.assertTrue(Season.SPRING==i);}使用接口靜態常量的方式比較難限定變量的範圍,而且定義繁瑣,功能也很有限,於是在Java 1.5 中定義了一個枚舉類型:java.lang.Enum。
  • 過濾原理之---氣舉
    這個原理在過濾器被商品化之前,一直被廣泛運用著。過去的作法是在水缸底部舖上一層粗砂,再將漏鬥埋入一半,然後插入一根輸氣管製造氣泡,構造非常簡單。漏鬥周邊的砂子同時肩負濾材的功能。在清理時只要先將魚兒撈出,然後攪拌砂子和水,再將髒水抽出即可。這是最常用的方法,即便到了現在還是有人利用這種方式來過濾小型水缸。
  • Java基礎面試題簡單總結
    中的保留字,現在沒有在java中使用11、數組有沒有length()這個方法?精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.431、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?
  • Java之File類的構造方法
    各位小夥伴們大家好,在之前的文章中,小編介紹了Java之File類的簡單介紹,File類的靜態成員變量,這次小編要介紹的是File類的構造方法\\code\\a.text");System.out.println(f1);//重寫了Object類的toString方法,列印的是一個路徑:c:\Users\java\code\a.textFile f2=new File("c:\\Users\\java
  • 2021 必須掌握的 21個Java 核心技術
    Java的運行 這條可能出看很簡單,java程序的運行誰不會呢? 不過很多時候, 我們只是單純通過IDE去執行java程序,底層IDE又是如何執行java程序呢?很多人並不了解。
  • Java開發之log日誌的使用儘量不用e.printStackTrace
    談到log日誌,小編建議初學java的朋友使用框架集成的log4j、logback這類統一列印日誌,儘量不使用catch的e.printStackTrace(),為什麼呢?下面我們來做簡單介紹。為什麼儘量不用e.printStackTrace直接用e.printStackTrace來列印日誌有錯嗎?當然不錯,但是不好。
  • 數控折彎機工作原理和使用方法詳解
    本文主要介紹的是數控折彎機的工作原理及使用方法,首先介紹了數控折彎機開機前要做的準備及開機的操作步驟教程,其次介紹了他的工作原理及關機步驟,最後闡述了如何保養及維護數控折彎機,具體的跟隨小編一起來了解一下吧。
  • java學習應用篇|idea的基本安裝和使用
    但人力終有限,有很多都需要他們自己去面對, 如日月之更替,寒暑之輪換。   我所接觸到的程式設計師,有的從初中因為興趣就開始學了,有的是大學因為學業開始學,有的則是工作之後迫於壓力轉行程式設計師。不管是什麼時候開始,我相信開始之時,都能識得漢字,數得數字,能自己進食,能自己穿衣,能開機,能下載安裝登錄微信,如此便足矣。
  • 原創】Java並發編程系列01|開篇獲獎感言
    1.並發理論:並發編程要解決的三大問題;介紹可見性與有序性問題的根源重排序;學習Java內存模型(JMM),理解JMM如何解決這些問題以實現並發編程的。2.並發關鍵字:深入volatile、synchronized、final關鍵字的作用,都解決了什麼問題,以及其實現原理。
  • 「原創」Java並發編程系列07|synchronized原理
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫並發編程中用到最多的關鍵字毫無疑問是synchronized。這篇文章就來探究下synchronized:synchronized如何使用?
  • Java之final關鍵字的簡單介紹下
    各位小夥伴大家好,在之前的文章中,小編有介紹過,final關鍵字修飾局部變量Java之final關鍵字的簡單介紹中,支持小編要介紹的是final關鍵字修飾成員變量Java之成員變量和局部變量的區別。final關鍵字修飾成員變量:對於成員變量來說,如果使用final關鍵字,那麼這個變量是不可變。1.由於成員變量具有默認值,所以用了final之後必須手動賦值,不會給默認值了。2.對於final修飾的成員變量,要麼使用直接賦值,要麼通過構造方法Java之構造方法與this關鍵字的簡單介紹賦值,二者選其一3.必須保證類當中所有重載的構造方法,都最終會對final的成員變量進行賦值。
  • 網絡分析系列之十一_Wireshark採集過濾器
    使用Wireshark採集數據包時,可能有諸多原因會使用到採集過濾器,比如減少採集的數據包大小來節省磁碟空間,加速問題和目標分析,提高軟體自身工作速率等等。本節介紹如何使用採集過濾器,以及常見的採集過濾器的特徵和表達方式,另外羅列出常用的採集過濾器表達式供參考。為什麼要使用抓包過濾器當網絡中數據流的規模相當龐大時,只抓取滿足某些條件的流量就顯得十分重要了。
  • 電瓶修復技術之電動車電池原理的簡單介紹
    打開APP 電瓶修復技術之電動車電池原理的簡單介紹 電瓶修復技術中心 發表於 2020-12-04 09:17:16 這種差別在新電池組的時候不太明顯,但是隨著使用循環次數的增加,這種差異越來越明顯,直到影響到最差的那隻電池不能完全充足電。 這時這種差別開始迅速增加,電池的欠充電和過充電在電池組內越來越明顯,直到最後電壓最高的電池充電失水嚴重、電壓最低的硫酸鹽化嚴重,整組電池不能勝任工作需要而失效。