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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java8 监控文件变化_[Java 8] (4) 列举目录下的所有文件和监视文件变化

發(fā)布時間:2025/3/20 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java8 监控文件变化_[Java 8] (4) 列举目录下的所有文件和监视文件变化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

列舉目錄中的所有文件

首先給出代碼:

Files.list(Paths.get(".")).forEach(System.out::println);

Files.list方法得到的是一個Stream類型的對象,它代表了目標(biāo)路徑下所有的文件。如果只想獲取目標(biāo)路徑下的所有目錄文件:

Files.list(Paths.get("."))

.filter(Files::isDirectory)

.forEach(System.out::println);

在以前的Java版本中,如果需要實(shí)現(xiàn)一個自定義的過濾器,那么通常會選擇使用FilenameFilter結(jié)合匿名類的方式:

final String[] files =

new File("target_dir").list(new java.io.FilenameFilter() {

public boolean accept(final File dir, final String name) {

return name.endsWith(".java");

}

});

System.out.println(files);

我們說過,當(dāng)遇見了匿名內(nèi)部類的時候,如果被實(shí)現(xiàn)的接口是一個函數(shù)式接口,那么可以考慮將該匿名內(nèi)部類以Lambda表達(dá)式的形式重新實(shí)現(xiàn),再結(jié)合Java 8中新添加的DirectoryStream,可以將上述代碼重新實(shí)現(xiàn)為:

Files.newDirectoryStream(

Paths.get("target_dir"),

path -> path.toString().endsWith(".java"))

.forEach(System.out::println);

當(dāng)目標(biāo)目錄下含有大量的文件或者子目錄時,使用DirectoryStream往往會具有更好的性能。因?yàn)樗鼘?shí)際上是一個Iterator用來遍歷目標(biāo)目錄,而直接使用listFiles方法時,得到的是一個代表了所有文件和目錄的數(shù)組,意味著內(nèi)存的開銷會更大。

使用flatMap列舉所有直接子目錄

所謂的直接子目錄(Immediate Subdirectory),指的就是目標(biāo)目錄下一級的所有目錄。對于這樣一個任務(wù),最直觀的實(shí)現(xiàn)方式恐怕是這樣的:

public static void listTheHardWay() {

List files = new ArrayList<>();

File[] filesInCurerentDir = new File(".").listFiles();

for(File file : filesInCurerentDir) {

File[] filesInSubDir = file.listFiles();

if(filesInSubDir != null) {

files.addAll(Arrays.asList(filesInSubDir));

} else {

files.add(file);

}

}

System.out.println("Count: " + files.size());

}

很顯然,此段代碼噪聲太多,沒有清晰地反映出代碼的整體目標(biāo)。下面就用flatMap方法來簡化它:

public static void betterWay() {

List files = Stream.of(new File(".").listFiles())

.flatMap(file -> file.listFiles() == null ?

Stream.of(file) : Stream.of(file.listFiles()))

.collect(toList());

System.out.println("Count: " + files.size());

}

// flatMap

Stream flatMap(Function super T, ? extends Stream extends R>> mapper);

從flatMap方法的簽名來看,它接受了一個Function接口作為參數(shù),將一種類型轉(zhuǎn)換為另一種類型的Stream類型。而從flatMap方法的命令來看,它的執(zhí)行過程主要包含兩個步驟:

首先是會對當(dāng)前Stream的每個元素執(zhí)行一次map操作,根據(jù)傳入的mapper對象將一個元素轉(zhuǎn)換為對應(yīng)的Stream對象將第一步中得到的若干個Stream對象匯集成一個Stream對象

從上面的代碼來看,簽名中的T類型就是File類型,而R類型同樣也是File類型。當(dāng)一個File對象不含有任何的子目錄或者子文件時,那么通過Stream.of(file)來僅僅包含它自身,否則使用Stream.of(file.listFiles())來包含其下的所有子目錄和子文件。

監(jiān)視文件變化

WatchService是Java 7中新添加的一個特性,用來監(jiān)視一某個路徑下的文件或者目錄是否發(fā)生了變化。

final Path path = Paths.get(".");

final WatchService watchService = path.getFileSystem().newWatchService();

path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);

System.out.println("Report any file changed within next 1 minutes...");

注冊了需要監(jiān)視的目錄后,需要使用WatchKey來得到一段時間內(nèi)的,該目錄的變化情況:

final WatchKey watchKey = watchService.poll(1, TimeUnit.MINUTES);

if(watchKey != null) {

watchKey.pollEvents().stream().forEach(event ->

System.out.println(event.context()));

}

這里使用了Java 8中的內(nèi)部遍歷器forEach來完成對于事件的遍歷。這也算是一個Java 7和Java 8特性的聯(lián)合使用吧。

總結(jié)

以上是生活随笔為你收集整理的java8 监控文件变化_[Java 8] (4) 列举目录下的所有文件和监视文件变化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 嫩嫩av| 草草在线视频 | 国产一区二区久久 | 成人毛片网 | 久久国产成人精品国产成人亚洲 | 日韩在线视频不卡 | 国产美女精品视频 | av男人的天堂网 | 国产美女菊爆在线播放APP | 国产精品高潮呻吟久久av黑人 | 快射视频网站 | 伊人蕉 | 99av视频 | 国产综合视频一区 | 师生出轨h灌满了1v1 | 日韩视频久久 | 在线只有精品 | 国产亚洲精久久久久久无码苍井空 | 九色视频在线观看 | 国产精品无码中文 | 午夜寂寞院 | 欧美三级特黄 | 精品视频在线看 | 91区| 国产99色 | 日本黄色xxxxx | www免费网站在线观看 | 青青草原伊人 | 懂色av成人一区二区三区 | 亚洲成色在线 | 免费在线成人av | 欧美精品久久久久久久久久 | 欧美视频1区| 久久免费的精品国产v∧ | 天堂在线日本 | 三大队在线观看 | 日日夜夜噜| 99久久久无码国产精品6 | 中文有码一区 | 国内自拍99 | 激情青青草 | 欧美gv在线 | av一级大片 | 五月天婷婷丁香花 | 久久精品女人毛片国产 | 欧美日韩aaa| 亚洲黄色在线观看视频 | 日本护士取精xxxxxhd | 欧美日韩1区2区3区 亚洲日本精品视频 | 日韩欧美国产中文字幕 | 成人亚洲黄色 | 狠狠插狠狠干 | 亚洲成人诱惑 | 岛国精品在线 | 精品国产96亚洲一区二区三区 | 日韩一区二区三区在线播放 | 在线观看欧美成人 | 精品一区二区三区免费看 | 午夜精品一区二区三区免费视频 | 久久久精品人妻一区二区三区色秀 | 亚洲中文字幕无码一区二区三区 | 久久99国产精品久久99果冻传媒 | 亚洲第一页在线观看 | 精品人妻无码一区二区三区蜜桃一 | 极品熟妇大蝴蝶20p 国产偷自拍视频 | 韩日产理伦片在线观看 | 亚洲成熟女性毛茸茸 | 国产精品2 | 爱色av网站 | 美女视频网址 | 伊人伊网 | 中文字幕在线观看网址 | 实拍澡堂美女洗澡av | 日韩爱爱视频 | 精品无码av一区二区三区四区 | 九草视频在线观看 | 国产乱国产乱300精品 | 黄色在线播放视频 | av黄色免费网站 | 十八岁世界在线观看高清免费韩剧 | 亚洲一区二区福利视频 | 婷婷色小说 | 亚洲人高潮女人毛茸茸 | 蜜桃视频成人在线观看 | 欧美成人动态图 | 国产第6页 | 欧美成人一区二区在线 | 欧美永久 | 国产又黄又爽视频 | 日本aⅴ视频 | 一区国产精品 | 日日射日日干 | 误杀1电影免费观看高清完整版 | 亚洲视频123 | 岛国二区 | 久久九九视频 | 色天使亚洲 | 亚洲天堂一区二区在线 | 51精品国自产在线 |