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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nio2和nio2_列出和过滤NIO.2中的目录内容

發(fā)布時(shí)間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nio2和nio2_列出和过滤NIO.2中的目录内容 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

nio2和nio2

在Java 7發(fā)行之前,列出目錄內(nèi)容的領(lǐng)域并沒有發(fā)生太多事情。但是,由于NIO.2引入了一種新的方法來做到這一點(diǎn),因此覆蓋這一領(lǐng)域可能是值得的。 NIO.2的一大優(yōu)點(diǎn)是能夠在一個(gè)方法調(diào)用中立即使用列表和過濾。 這為與文件系統(tǒng)相關(guān)的大多數(shù)列表/篩選需求提供了一種優(yōu)雅的解決方案。

列出根目錄

除非我們使用相對(duì)路徑,否則我們需要了解應(yīng)用程序所處的環(huán)境,因此我們可以定義絕對(duì)路徑。 由于文件系統(tǒng)通常是分層結(jié)構(gòu),因此至少有一個(gè)根目錄。 為了正確處理文件和目錄,我們需要能夠列出所有這些根目錄。 為此,我們轉(zhuǎn)向FileSystem實(shí)例本身以使用其方法getRootDirectories ,它是Java 6構(gòu)造File.listRoots()的替代方法。

Iterable<Path> it = FileSystems.getDefault().getRootDirectories();System.out.println("Root file system locations: " + Sets.newHashSet(it));

*請(qǐng)注意, Sets類不是JDK的一部分,而是來自Google的Guava庫(kù)。 我在這里使用它只是為了方便獲得根目錄的格式正確的字符串表示形式。

具有以下輸出:

Root file system locations: C:\, D:\, E:\, F:\, G:\, H:\, I:\,

列出和過濾目錄內(nèi)容

使用文件系統(tǒng)時(shí),標(biāo)準(zhǔn)任務(wù)是列出或過濾給定目錄中的文件。 我們可能需要修改,分析或簡(jiǎn)單列出它們-不管什么原因,類java.nio.file.Files都有我們的支持。 它提供了newDirectoryStream方法的三種變體,它們返回DirectoryStream<Path>類型的對(duì)象,以允許我們遍歷目錄中的條目。 在這里,我們看到了防止NullPointerException的IO庫(kù)的當(dāng)前版本與先前版本(返回簡(jiǎn)單數(shù)組)之間的明顯差異。 以下示例說明了列出給定目錄內(nèi)容的簡(jiǎn)單程度:

Path directoryPath = Paths.get("C:", "Program Files/Java/jdk1.7.0_40/src/java/nio/file");if (Files.isDirectory(directoryPath)) {try (DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath)) {for (Path path : stream) {System.out.println(path);}} catch (IOException e) {throw new RuntimeException(e);} }

請(qǐng)注意,使用isDirectory檢查方法可防止NotDirectoryException 。 還要注意try-with-resources構(gòu)造的使用– DirectoryStream是AutoCloseable和Closeable (這意味著它需要在某個(gè)時(shí)間關(guān)閉),因此try-with-resources派上了用場(chǎng)。 代碼返回以下輸出:

... C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\CopyOption.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\DirectoryIteratorException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\DirectoryNotEmptyException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\DirectoryStream.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileAlreadyExistsException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\Files.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileStore.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileSystem.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileSystemAlreadyExistsException.java ...

為了確保DirectoryStream<Path>通用可用性,我們可以使用兩種基本機(jī)制進(jìn)行過濾:

  • newDirectoryStream(Path dir, String glob)
    • 使用GLOB過濾
  • newDirectoryStream (Path dir, DirectoryStream.Filterfilter)
    • 使用DirectoryStream.Filter過濾

使用GLOB模式過濾

首先,我們需要知道GLOB是什么。 GLOB模式是遵循特定語法規(guī)則的字符串表達(dá)式,它們用于匹配目的。 請(qǐng)參閱以下文章,以獲取有關(guān)GLOB和GLOB語法的更多信息。 在使用GLOB進(jìn)行過濾時(shí), Files類為我們提供了一種簡(jiǎn)便的方法。 讓我們看下面的例子。

Path directoryPath = Paths.get("C:", "Program Files/Java/jdk1.7.0_40/src/java/nio/file");if (Files.isDirectory(directoryPath)) {try (DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath, "File*Exception*")) {for (Path path : stream) {System.out.println(path);}} catch (IOException e) {throw new RuntimeException(e);} }

具有以下輸出:

C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileAlreadyExistsException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileSystemAlreadyExistsException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileSystemException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileSystemLoopException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileSystemNotFoundException.java

使用DirectoryStream.Filter進(jìn)行過濾

當(dāng)手頭的任務(wù)需要更復(fù)雜的過濾選項(xiàng)而不僅僅是簡(jiǎn)單的文件名匹配時(shí),我們需要實(shí)現(xiàn)DirectoryStream.Filter<Path>接口。 這是我們可以使用的最強(qiáng)大的篩選選項(xiàng),因?yàn)槲覀兛梢栽L問應(yīng)用程序的其余部分,并且可能使用第三方庫(kù)。 下面的示例使用兩種過濾條件顯示了這種情況:

  • 文件大小必須為偶數(shù)
  • 執(zhí)行時(shí)間(以毫秒為單位)必須為偶數(shù)
Path directoryPath = Paths.get("C:", "Program Files/Java/jdk1.7.0_40/src/java/nio/file"); DirectoryStream.Filter<Path> filter = new Filter<Path>() {@Overridepublic boolean accept(Path entry) throws IOException {long size = Files.readAttributes(entry, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).size();long milis = new Date().getTime();boolean isSizeEvenNumber = size % 2 == 0;boolean isTheTimeRight = milis % 2 == 0;return isTheTimeRight && isSizeEvenNumber;} };if (Files.isDirectory(directoryPath)) {try (DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath, filter)) {for (Path path : stream) {System.out.println(path);}} catch (IOException e) {throw new RuntimeException(e);} }

具有以下輸出:

C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\DirectoryStream.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\FileAlreadyExistsException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\Files.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\NotDirectoryException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\NotLinkException.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\package-info.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\WatchEvent.java C:\Program Files\Java\jdk1.7.0_40\src\java\nio\file\WatchService.java

*請(qǐng)注意,根據(jù)使用條件,每次執(zhí)行過濾后的文件可能會(huì)有所不同。

翻譯自: https://www.javacodegeeks.com/2014/06/listing-and-filtering-directory-contents-in-nio-2.html

nio2和nio2

總結(jié)

以上是生活随笔為你收集整理的nio2和nio2_列出和过滤NIO.2中的目录内容的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产一区二区精品久久 | 黄色三级av| 国产精品女同一区二区 | 99视频久久 | 性福宝av | 日日艹夜夜艹 | 最好看十大无码av | 亚洲综合无码一区二区 | 欧美视频一区二区三区四区在线观看 | av激情四射 | 一卡二卡久久 | 国产一区二区毛片 | 国产福利电影在线 | 影音先锋在线视频观看 | 欧美做爰性生交视频 | 特级大胆西西4444人体 | 欧美综合一区 | 成人美女免费网站视频 | 91在线精品李宗瑞 | 97超碰人人爱 | 强迫凌虐淫辱の牝奴在线观看 | 日韩中文网 | 国产视频91在线 | 狠狠干一区 | 波多野结衣在线视频免费观看 | 超碰97av在线 | 欧美青草视频 | 国产精品资源站 | 狠狠干综合 | 中文字幕精品在线观看 | 亚洲欧美精品一区二区 | 国产成人97精品免费看片 | 最近中文字幕在线中文高清版 | 毛片全黄 | 亚洲国产在 | 国产一级一片免费播放放a 丁香六月色 | 国产视频1区 | 免费精品国产 | 夜色一区二区 | 国产成人精品视频一区二区 | 国产极品美女高潮无套嗷嗷叫酒店 | 蜜桃av噜噜一区二区三区麻豆 | 丰满女人又爽又紧又丰满 | 久久6| 野外吮她的花蒂高h在线观看 | 日本亚洲欧美 | 青青草视频免费观看 | 亚洲成人av一区二区三区 | 777理伦三级做爰 | 不卡影院一区二区 | 亚洲黄色天堂 | 国内老熟妇对白xxxxhd | 在线观看日本网站 | 日本性高潮视频 | 91蜜桃臀久久一区二区 | 乱淫的女高中暑假调教h | 波多在线视频 | 国产在线日本 | 18av在线视频 | 日韩中文字幕 | 久热国产精品视频 | 美女露胸软件 | 狠狠撸在线视频 | 97人妻天天摸天天爽天天 | 热热色av| 少妇无套内谢免费视频 | 99久久精品免费 | 欧美做爰全过程免费看 | 日本性欧美 | 91 高清 在线 制服 偷拍 | jizz国产免费| 午夜在线精品 | 翔田千里x88aⅴ | 国产国产乱老熟女视频网站97 | 高潮喷水一区二区三区 | 99精品在线播放 | 成人动漫在线免费观看 | 色综合天天操 | ass东方小嫩模pics | 国产三级aaa | 亚洲 成人 av | aaaa视频 | 阿v免费视频| 中国在线观看片免费 | 亚洲一区影院 | 精品视频www | 涩涩网站在线看 | 99精品人妻少妇一区二区 | 日韩无套无码精品 | 欧美一区二区三区久久成人精品 | 亚洲狼人综合网 | 嫩草影院懂你的影院 | 黄色三级片毛片 | 国产精品久久久网站 | 在线超碰91 | 亚洲 小说区 图片区 都市 | 欧美黄色a视频 | 中文天堂 | 日韩免费精品 |