java 8 lambda_玩Java 8 – Lambda,路径和文件
java 8 lambda
我最近需要讀取一堆文件,而不是僅僅抓住我和可能是大多數(shù)開發(fā)人員擁有的舊FileUtils.java,然后從一個(gè)項(xiàng)目復(fù)制到另一個(gè)項(xiàng)目,我決定快速看看其他方法。
是的,我知道有Commons IO和Google IO ,我為什么還要打擾? 他們可能會做得更好,但是我想檢查一下NIO jdk類并同時(shí)使用lambda。而且,老實(shí)說,我認(rèn)為這實(shí)際上是一段非常整齊的代碼。
所以我有一個(gè)特定的用例:
我想逐行從整個(gè)目錄樹中讀取所有源文件。
該代碼的作用是,它使用Files.walk從起點(diǎn)遞歸獲取所有路徑,并創(chuàng)建一個(gè)流,然后將其過濾為僅以所需擴(kuò)展名結(jié)尾的文件。 對于每個(gè)文件,我使用Files.lines創(chuàng)建一個(gè)字符串流,每行一個(gè)。 我修剪一下,過濾掉空的并將其添加到return集合中。
一切都非常簡潔,這要?dú)w功于新的構(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
java 8 lambda
總結(jié)
以上是生活随笔為你收集整理的java 8 lambda_玩Java 8 – Lambda,路径和文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenJDK织机和结构化并发
- 下一篇: 如何在Java中修复表达式的非法开头