NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API,您可以執行與
java.io以及許多出色的功能,例如:訪問文件元數據和監視目錄更改等。 顯然,由于向后兼容,java.io包不會消失,但是我們鼓勵為滿足新的I / O需求而開始使用NIO.2。 在本文中,我們將看到使用此API過濾目錄內容有多么容易。 有3種方法可以做到這一點,這就是為什么這篇文章是Part1。
你需要什么
NetBeans 7+或任何其他支持Java 7的IDE
JDK 7+
在某些應用程序中,過濾目錄的內容是一項常見的任務,而NIO.2使其變得非常簡單。 接下來將描述我們將要使用的類和接口:
- java.nio.file.Path :接口,其對象可以表示文件系統中的文件或目錄。 就像java.io.File,但是在NIO.2中。 無論您要執行什么I / O操作,都需要該接口的實例。
- java.nio.file.DirectoryStream :接口,其對象遍歷目錄的內容。
- java.nio.file.Files :帶有對文件,目錄等進行操作的靜態方法的類。
我們將使用目錄模式來過濾目錄內容,這種模式類似于正則表達式,但更簡單。 該模式與文件,目錄等的名稱匹配。它們位于目錄內。 記住這一點很重要,使用此方法只能按文件名,目錄名等進行過濾。
有關浮動的更多信息,
檢查此Wiki 。 另外,在 Java文件 。
因此,假設我們有一個名為Images的目錄,并且需要遍歷該目錄中的文件,但是我們只需要.png文件。 為此,我們必須遵循以下步驟:
- 獲取一個指向目錄Images的java.nio.file.Path實例。
- 打開使用java.nio.file.Files類,以及將目錄和圖案(* .PNG)作為參數的新java.nio.file.DirectoryStream。
- 使用java.nio.file.DirectoryStream實例遍歷目錄的內容。
接下來是使用作為參數傳遞的模式掃描目錄的方法的源代碼:
//in a class.../*** Scans the directory using the glob pattern passed * as parameter. * @param folder directory to scan* @param pattern glob pattern (filter)*/private static void scan(String folder, String pattern) {//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!');}//Try with resources... so nice!try (DirectoryStreamds = Files.newDirectoryStream(dir, pattern)) {//iterate over the content of the directoryint count = 0;for (Path path : ds) {System.out.println(path.getFileName());count++;}System.out.println();System.out.printf('%d Files match the pattern', count);} catch (IOException ex) {ex.printStackTrace();}}
以下是在Windows計算機上執行的結果:
在我的Linux虛擬機上:
這就是我從Java中喜歡的東西,只需編寫一次,就可以在任何地方運行! 希望您喜歡這篇文章,還有更多方法可以過濾目錄的內容,我們將在以后的文章中進行探討。
單擊此處下載完整的源代碼。
參考: Java 7:使用NIO.2進行文件過濾–來自Java和ME博客的JCG合作伙伴 Alexis Lopez的第1部分 。
翻譯自: https://www.javacodegeeks.com/2012/10/java-7-file-filtering-using-nio-2-part-1.html