Java 7:使用NIO.2進行文件過濾-第2部分

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

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

你需要什么

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

JDK 7+

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

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

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

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

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

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

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

//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();}}

您可以嘗試使用以下參數調用最后一個方法:

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

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

以下是在Windows計算機上執行的結果:

在我的Linux虛擬機上:

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

希望您喜歡這篇文章,還有另一種更強大的方法來過濾目錄的內容,我們將在第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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370362.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

js for 循環 添加tr td 算法

StringBuffer sbnew StringBuffer(); int n 5; sb.append("<tr>"); List<MenuBean> chs mb.getChildren(); for(int j 0; chs ! null && j < chs.size(); j){ MenuBean _mb2 chs.get(j); if (i % n 0)//被n整除&#xff0c;即有了n列之后…

1034. 二哥的金鏈

Description 一個陽光明媚的周末&#xff0c;二哥出去游山玩水&#xff0c;然而粗心的二哥在路上把錢包弄丟了。傍晚時分二哥來到了一家小旅店&#xff0c;他翻便全身的口袋也沒翻著多少錢&#xff0c;而他身上唯一值錢的就是一條漂亮的金鏈。這條金鏈散發著奇異的光澤&#xf…

課時76.兄弟選擇器(掌握)

我們先來明確一點&#xff0c;什么是兄弟&#xff1f; 比如&#xff0c;head和body是兄弟&#xff0c;必須是同級關系&#xff0c;如果是嵌套關系&#xff0c;兒子&#xff0c;孫子則不可以。 1.相鄰兄弟選擇器 CSS2 作用&#xff1a;給指定選擇器后面緊跟的那個選擇器選中的…

java中不能定義為變量名稱_Java,“變量名”不能解析為變量

我使用Java使用Eclipse&#xff0c;出現此錯誤&#xff1a;"Variable name" cannot be resolved to a variable.使用此Java程序&#xff1a;public class SalCal {private int hoursWorked;public SalCal(String name, int hours, double hoursRate) {nameEmployee …

24v開關電源維修技巧_康佳LED液晶彩電KPS+L1900C301電源板原理與維修

康佳液晶彩電采用的KPSL1900C3-01型電源板&#xff0c;編號為34007728&#xff0c;版本號為35015686集成電路采用FAN7530FSGM300FSFR1700組合方案&#xff0c;輸出5.1VSB/4A、24V/4A、12V/4A電壓。應用于康佳LED47IS988PD、LED42M11PD、LED46MS92DC、LED42IS988PDE、LED42X5000…

zookeeper集群 新手安裝指南

Zookeeper集群的角色&#xff1a; Leader 和 follower &#xff08;Observer&#xff09;zk集群最好配成奇數個節點只要集群中有半數以上節點存活&#xff0c;集群就能提供服務本事例采用版本:zookeeper-3.4.5 虛擬機:zk1 zk2 zk3/****************************************…

Google Guava并發– ListenableFuture

在上一篇文章中&#xff0c;我介紹了使用番石榴庫中com.google.common.util.concurrent包中的Monitor類。 在本文中&#xff0c;我將繼續介紹Guava并發實用程序&#xff0c;并討論ListenableFuture接口。 ListenableFuture通過添加接受完成偵聽器的方法&#xff0c;從java.util…

課時71.后代選擇器(掌握)

1.什么是后代選擇器&#xff1f; 作用&#xff1a;找到指定標簽的所有后代標簽&#xff0c;設置屬性。 首先你要明確什么是后代&#xff1f; 你的兒子&#xff0c;孫子&#xff0c;重孫子等&#xff0c;只要有你的血脈的&#xff0c;都是你的后代。 我們先來舉個例子 我們想…

java小球碰撞界面設計_JavaScript實現小球碰撞特效

JavaScript實現小球碰撞特效。類似自由落體運動。實現原理非常簡單&#xff0c;就是動態的改變每個元素的坐標。使用radius屬性將圖片圓角化。使用left&#xff0c;top屬性動態的改變小球的位置。碰撞反彈球&#xff0c;當碰撞到容器的邊緣后&#xff0c;進行反彈&#xff0c;反…

es6常用基礎合集

es6常用基礎合集 在實際開發中&#xff0c;ES6已經非常普及了。掌握ES6的知識變成了一種必須。盡管我們在使用時仍然需要經過babel編譯。 ES6徹底改變了前端的編碼風格&#xff0c;可以說對于前端的影響非常巨大。值得高興的是&#xff0c;如果你熟悉ES5&#xff0c;學習ES6并不…

java接口開發_如果你想學好Java,這些你需要了解

01基本知識  在學習Java之前&#xff0c;您需要了解計算機的基本知識&#xff0c;然后再學習Java。同時&#xff0c;您需要熟悉DOS命令、Java概述、JDK環境安裝配置、環境變量配置。JDK和環境變量配置完成后&#xff0c;就可以編寫Java程序了。02編程格式  此時&#xff0c…

從Java程序生成QR碼圖像

如果您精通技術和小工具&#xff0c;則必須了解QR碼。 這些天&#xff0c;到處都可以找到它-在博客&#xff0c;網站&#xff0c;甚至在某些公共場所。 這在移動應用程序中非常流行&#xff0c;在移動應用程序中&#xff0c;您可以使用QR Code掃描儀應用程序掃描QR Code&#x…

LintCode-最長公共子串

給出兩個字符串&#xff0c;找到最長公共子串。并返回其長度。 您在真實的面試中是否遇到過這個題&#xff1f; Yes例子 給出A“ABCD”&#xff0c;B“CBCE”&#xff0c;返回 2 注意 子串的字符應該連續的出如今原字符串中&#xff0c;這與子序列有所不同。標簽 Expand 相關…

課時67.標簽選擇器(掌握)

通過上節課的學習我們明白了如何通過十六進制來表示顏色 例如&#xff1a;紅色的幾種表示方法 我們發現在學習CSS當中的一些屬性的時候&#xff0c;它都有一些套路 只要知道屬性的名稱&#xff0c;屬性有什么作用&#xff0c;它有哪些取值&#xff0c;這個屬性有什么注意點 …

計算幾何問題 java_【轉載】ACM計算幾何題目推薦

2107 Quoit Design 典型最近點對問題POJ 3714 Raid 變種最近點對問題B&#xff0c;最小包圍圓最小包圍圓的算法是一種增量算法&#xff0c;期望是O(n)。ZOJ 1450 Minimal CircleHDU 3007 Buried memoryC&#xff0c;旋轉卡殼POJ 3608 Bridge Acr…

jdbc連接oracle的幾種格式

1. SID的方式。已經不推薦使用這種方式了。 jdbc:oracle:thin:[<user>/<password>]<host>[:<port>]:<SID> 2.Service Name的方式。 jdbc:oracle:thin:[<user>/<password>]//<host>[:<port>]/<service> 3.TNSNames…

Java 7:使用NIO.2進行文件過濾-第1部分

NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API&#xff0c;您可以執行與 java.io以及許多出色的功能&#xff0c;例如&#xff1a;訪問文件元數據和監視目錄更改等。 顯然&#xff0c;由于向后兼容&#xff0c;java.io包不會消失&#xff0c;但是我們鼓勵為…

第十三周活動進度表

學習進度表&#xff1a; 第三周內容時間周一&#xff08;4&#xff1a;10-6&#xff1a;00&#xff09;上課&#xff0c;周二晚上&#xff08;8&#xff1a;00-9&#xff1a;00&#xff09;&#xff0c;周四晚上&#xff08;8&#xff1a;00-8&#xff1a;30&#xff09;&#…

課時66.顏色控制屬性下(理解)

今天來講解十六進制控制屬性的方法&#xff0c;其實用十六進制表示的方式本質就是rgb&#xff0c;只不過它們的格式不一樣而已&#xff0c;十六進制中是通過每兩位表示一種顏色的方式來給顏色賦值。 如 #FF0000 FF----r 00----g 00----b 修改前兩位相當于修改rgb中的第一…

idea復制java_IntelliJ IDEA的剪切、復制和粘貼

IntelliJ IDEA的剪切、復制和粘貼本節內容概覽&#xff1a;? 剪切、復制和粘貼的基本使用? 復制選定的文本片段? 將路徑復制到文件? 將引用復制到一行或一個符號? 剪切選定的文本片段? 從剪貼板粘貼最后一個條目? 將最后一個條目從剪貼板粘貼為純文本? 從剪貼板粘貼特定…