玩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,路径和文件相关推荐
- java 文件路径读取,java中依据路径读取文件
java中根据路径读取文件 根据文件路径读取文件.具体代码如下: /** * 根据文件路径读取文件 * @param path * @return String * @throws IOExcepti ...
- java 使用相对路径读取文件
java 使用相对路径读取文件 1.java project环境,使用java.io用相对路径读取文件的例子: *目录结构: DecisionTree |___src ...
- java 8 lambda_玩Java 8 – Lambda,路径和文件
java 8 lambda 我最近需要读取一堆文件,而不是仅仅抓住我和可能是大多数开发人员拥有的旧FileUtils.java,然后从一个项目复制到另一个项目,我决定快速看看其他方法. 是的,我知道有 ...
- lambda 高并发_玩Java 8 – Lambda和并发
lambda 高并发 因此Java 8不久前发布,具有大量功能和更改. 我们所有的Java狂热者一直在等待这一点,从他们最初宣布Java 7的所有强大功能开始一直到最终被取消. 我最近才有时间实际开始 ...
- 玩Java 8 – Lambda和并发
因此Java 8不久前发布,具有许多功能和更改. 我们所有的Java狂热者一直在等待这个历史,从他们最初宣布Java 7的所有强大功能开始一直到最终被取消. 我最近才有时间实际开始给它一个真实的外观, ...
- java core 生成路径_core文件生成和路径设置
在程序崩溃时,内核会生成一个core文件,即程序最后崩溃时的内存映像,和程序调试信息. 之后可以通过gdb,打开core文件察看程序崩溃时的堆栈信息,可以找出程序出错的代码所在文件和函数. 1.cor ...
- Java相对路径读取文件
不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的. 项目的文件夹结构: repathtest ├─sr ...
- java 相对路径 文件读取,Java相对路径读取文件
Java相对路径读取文件 不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的. 项目的文件夹结构: re ...
- java file 相对路径 根目录修改_java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)...
https://blog.csdn.net/my__sun_/article/details/74450241 读取文件的写法,相对路径 在当前的目录结构中读取test.txt的有四种写法 简单粗暴的 ...
最新文章
- 『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)
- 剑指Offer——Java答案
- Eclipse常用快捷
- 空降进阿里的 P10 都是什么人
- JavaScript使用正则表达式进行邮箱表单验证实例
- 详解MBR分区结构以及GPT分区结构
- [Ext JS 4] contentEL,renderTo, applyTo 释义与区别
- 东大OJ-1430-PrimeNumbers
- 西南科技大学计算机专业宿舍条件怎么样,西南科技大学宿舍条件,宿舍环境图片(10篇)...
- 2016年中国OTT盒子行业市场现状及发展前景分析
- 如何有效提升软件测试质量?
- Himall商城文件帮助类IOHelper(1)
- java sts安装步骤_如何安装STS
- 把网站部署到IIS后访问不了,报错IIS管理器无法验证此内置账户是否有访问权
- 如何有效的阅读开源代码
- Cartographer 3D建图与纯定位(在线建图、保存和纯定位)
- [CF1463F]Max Correct Set
- python爬虫爬取补天公益SRC厂商
- jwt token使用autho0-jwt框架使用(二)
- 正则表达式的语法规则
热门文章
- JS (intermediate value).Format is not a function问题解决
- tomcat(8)载入器
- JDBC的SQL注入漏洞
- spring jpa 流式_从响应式Spring Data存储库流式传输实时更新
- 朝着理想坚实迈进_坚实原则:开放/封闭原则
- java 异常处理发生异常_处理Java中的异常
- rxjava 背压_背压加载文件– RxJava常见问题解答
- neo4j 添加属性_Neo4j:动态添加属性/设置动态属性
- jax-rs jax-ws_快速浏览JAX-RS请求与方法匹配
- intellij 使用_使用IntelliJ书签