日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 7:使用NIO.2进行文件过滤-第2部分

發(fā)布時間:2023/12/3 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 7:使用NIO.2进行文件过滤-第2部分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家好。 這是使用NIO.2系列進行文件過濾的第2部分。 對于那些尚未閱讀第1部分的人 ,這里有個回顧。

NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API,您可以執(zhí)行與java.io相同的操作,以及許多出色的功能,例如:訪問文件元數(shù)據(jù)并查看用于目錄更改等。 顯然,由于向后兼容,java.io包不會消失,但是我們鼓勵為滿足新的I / O需求而開始使用NIO.2。 在本文中,我們將看到使用此API過濾目錄內(nèi)容有多么容易。 為此,有3種方法,我們已經(jīng)在第1部分中回顧了一種方法,現(xiàn)在我們將看到另一種方法。

你需要什么

NetBeans 7+或任何其他支持Java 7的IDE

JDK 7+

在某些應用程序中,過濾目錄的內(nèi)容是一項常見的任務,而NIO.2使其變得非常簡單。 接下來將描述我們將要使用的類和接口:

  • java.nio.file.Path :接口,其對象可以表示文件系統(tǒng)中的文件或目錄。 就像java.io.File,但是在NIO.2中。 無論您要執(zhí)行什么I / O操作,都需要該接口的實例。
  • java.nio.file.PathMatcher :允許對象在路徑上執(zhí)行匹配操作的接口。
  • java.nio.file.DirectoryStream :接口,其對象遍歷目錄的內(nèi)容。
  • java.nio.file.Files :帶有對文件,目錄等進行操作的靜態(tài)方法的類。

我們將用來過濾目錄內(nèi)容的方法是通過使用實現(xiàn)java.nio.file.PathMatcher接口的對象。 我們可以使用方法在java.nio.file.Files類的幫助下獲得這些對象之一
+ getPathMatcher(String):PathMatcher 。 此方法同時支持'glob'和'regex'模式。 您可以檢查使用NIO.2的文件過濾的第1部分,以獲取有關(guān)“ glob”的更多信息以及有關(guān)“ regex”的信息,請訪問java.util.regex.Pattern類。 該模式與文件,目錄等的名稱匹配。它們位于目錄內(nèi)。 記住這一點很重要,使用此方法只能按文件名,目錄名等進行過濾。

例如,如果要過濾.png和.jpg圖像,則應使用以下語法和模式之一(請注意語法和模式之間的冒號):

  • 'glob:*。{png,jpg}'
  • 'regex:([[^ \ s] +(\。(?i)(png | jpg))$)'

當然,“ glob”語法要簡單得多,但是您可以選擇使用正則表達式進行更詳細的匹配。 無論如何,您可能想知道如果java.nio.files.DirectoryStream接口允許您直接使用'glob'進行過濾,那么為什么應該使用這種方法呢?讓我們假設(shè)您已經(jīng)有了一個過濾器,但是您需要執(zhí)行一種過濾操作,那就是您需要使用這種方法時。

以下代碼段定義了一種使用不同模式掃描目錄的方法:

//in a class.../*** Scans the directory using the patterns passed * as parameters. * Only 3 patterns will be used.* @param folder directory to scan* @param patterns The first pattern will be used* as the glob pattern for the DirectoryStream. */private static void scan(String folder, String... patterns) {//obtains the Images directory in the app directoryPath dir = Paths.get(folder);//the Files class offers methods for validationif (!Files.exists(dir) || !Files.isDirectory(dir)) {System.out.println('No such directory!');return;}//validate at least the glob patternif (patterns == null || patterns.length < 1) {System.out.println('Please provide at least the glob pattern.');return;}//obtain the objects that implements PathMatcherPathMatcher extraFilterOne = null;PathMatcher extraFilterTwo = null;if (patterns.length > 1 && patterns[1] != null) {extraFilterOne = FileSystems.getDefault().getPathMatcher(patterns[1]);}if (patterns.length > 2 && patterns[2] != null) {extraFilterTwo = FileSystems.getDefault().getPathMatcher(patterns[2]);}//Try with resources... so nice!try (DirectoryStreamds = Files.newDirectoryStream(dir, patterns[0])) {//iterate over the content of the directory and apply //any other extra patternint count = 0;for (Path path : ds) {System.out.println('Evaluating ' + path.getFileName());if (extraFilterOne != null && extraFilterOne.matches(path.getFileName())) {System.out.println('Match found Do something!');}if (extraFilterTwo != null && extraFilterTwo.matches(path.getFileName())) {System.out.println('Match found Do something else!');}count++;}System.out.println();System.out.printf('%d Files match the global pattern\n', count);} catch (IOException ex) {ex.printStackTrace();}}

您可以嘗試使用以下參數(shù)調(diào)用最后一個方法:

  • C:\ Images或/ Images,具體取決于您的操作系統(tǒng)。
  • ?_ *。jpg此模式指定您要使用名稱以一位開頭和下劃線開頭的所有.jpg圖像。
  • glob:2_ *指定另一個過濾器(使用glob語法),在該過濾器中,您僅需要名稱以第二個數(shù)字開頭并帶有下劃線的項目。
  • glob:3_ *指定另一個過濾器(使用glob語法),在該過濾器中,您只希望名稱以數(shù)字3開頭并帶有下劃線的項目。

擁有多個過濾器可讓您對匹配項采取不同的操作。

以下是在Windows計算機上執(zhí)行的結(jié)果:

在我的Linux虛擬機上:

再一次,寫一次,到處運行! 但是,請注意,項目的順序取決于系統(tǒng),因此請不要硬編碼文件或目錄的位置。

希望您喜歡這篇文章,還有另一種更強大的方法來過濾目錄的內(nèi)容,我們將在第3部分中進行探討。 單擊此處以下載源代碼。

參考: Java 7:使用NIO.2進行文件過濾–來自Java和ME博客的JCG合作伙伴 Alexis Lopez的第2部分 。

翻譯自: https://www.javacodegeeks.com/2012/11/java-7-file-filtering-using-nio-2-part-2.html

總結(jié)

以上是生活随笔為你收集整理的Java 7:使用NIO.2进行文件过滤-第2部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。