玩Java 8 – Lambda,路径和文件
生活随笔
收集整理的這篇文章主要介紹了
玩Java 8 – Lambda,路径和文件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我最近需要讀取一堆文件,而不是僅僅抓住我和可能是大多數(shù)開發(fā)人員擁有的舊FileUtils.java,然后從一個項目復(fù)制到另一個項目,我決定快速了解其他方法。
是的,我知道有Commons IO和Google IO ,我為什么還要打擾? 他們可能會做得更好,但是我想檢查一下NIO jdk類并同時使用lambda。而且,老實說,我認為這實際上是一段非常整齊的代碼。
所以我有一個特定的用例:
我想逐行從整個目錄樹中讀取所有源文件。
該代碼的作用是,它使用Files.walk從起點遞歸獲取所有路徑,并創(chuàng)建一個流,然后將其過濾為僅以所需擴展名結(jié)尾的文件。 對于每個文件,我使用Files.lines創(chuàng)建一個字符串流,每行一個。 我修剪一下,過濾掉空的并將其添加到return集合中。
一切都非常簡潔,這要歸功于新的構(gòu)造。
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
總結(jié)
以上是生活随笔為你收集整理的玩Java 8 – Lambda,路径和文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新仙剑奇侠传安卓版下载(新仙剑奇侠传安卓
- 下一篇: 处理Akka应用程序中的每个事件