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

歡迎訪問 生活随笔!

生活随笔

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

java

玩Java 8 – Lambda,路径和文件

發布時間:2023/12/3 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩Java 8 – Lambda,路径和文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我最近需要讀取一堆文件,而不是僅僅抓住我和可能是大多數開發人員擁有的舊FileUtils.java,然后從一個項目復制到另一個項目,我決定快速了解其他方法。

是的,我知道有Commons IO和Google IO ,我為什么還要打擾? 他們可能會做得更好,但是我想檢查一下NIO jdk類并同時使用lambda。而且,老實說,我認為這實際上是一段非常整齊的代碼。

所以我有一個特定的用例:
我想逐行從整個目錄樹中讀取所有源文件。

該代碼的作用是,它使用Files.walk從起點遞歸獲取所有路徑,并創建一個流,然后將其過濾為僅以所需擴展名結尾的文件。 對于每個文件,我使用Files.lines創建一個字符串流,每行一個。 我修剪一下,過濾掉空的并將其添加到return集合中。

一切都非常簡潔,這要歸功于新的構造。

package net.briandupreez.blog.java8.io;import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.FileVisitOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream;/*** RecursiveFileLineReader* Created by Brian on 2014-05-26.*/ public class RecursiveFileLineReader {private transient static final Log LOG = LogFactory.getLog(RecursiveFileLineReader.class);/*** Get all the non empty lines from all the files with the specific extension, recursively.** @param path the path to start recursion* @param extension the file extension* @return list of lines*/public static List<String> readAllLineFromAllFilesRecursively(final String path, final String extension) {final List<String> lines = new ArrayList<>();try (final Stream<Path> pathStream = Files.walk(Paths.get(path), FileVisitOption.FOLLOW_LINKS)) {pathStream.filter((p) -> !p.toFile().isDirectory() && p.toFile().getAbsolutePath().endsWith(extension)).forEach(p -> fileLinesToList(p, lines));} catch (final IOException e) {LOG.error(e.getMessage(), e);}return lines;}private static void fileLinesToList(final Path file, final List<String> lines) {try (Stream<String> stream = Files.lines(file, Charset.defaultCharset())) {stream.map(String::trim).filter(s -> !s.isEmpty()).forEach(lines::add);} catch (final IOException e) {LOG.error(e.getMessage(), e);}}}

翻譯自: https://www.javacodegeeks.com/2014/05/playing-with-java-8-lambdas-paths-and-files.html

總結

以上是生活随笔為你收集整理的玩Java 8 – Lambda,路径和文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。