我最近需要读取一堆文件,而不是仅仅抓住我和可能是大多数开发人员拥有的旧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,路径和文件相关推荐

  1. java 文件路径读取,java中依据路径读取文件

    java中根据路径读取文件 根据文件路径读取文件.具体代码如下: /** * 根据文件路径读取文件 * @param path * @return String * @throws IOExcepti ...

  2. java 使用相对路径读取文件

    java 使用相对路径读取文件 1.java project环境,使用java.io用相对路径读取文件的例子:  *目录结构:   DecisionTree             |___src   ...

  3. java 8 lambda_玩Java 8 – Lambda,路径和文件

    java 8 lambda 我最近需要读取一堆文件,而不是仅仅抓住我和可能是大多数开发人员拥有的旧FileUtils.java,然后从一个项目复制到另一个项目,我决定快速看看其他方法. 是的,我知道有 ...

  4. lambda 高并发_玩Java 8 – Lambda和并发

    lambda 高并发 因此Java 8不久前发布,具有大量功能和更改. 我们所有的Java狂热者一直在等待这一点,从他们最初宣布Java 7的所有强大功能开始一直到最终被取消. 我最近才有时间实际开始 ...

  5. 玩Java 8 – Lambda和并发

    因此Java 8不久前发布,具有许多功能和更改. 我们所有的Java狂热者一直在等待这个历史,从他们最初宣布Java 7的所有强大功能开始一直到最终被取消. 我最近才有时间实际开始给它一个真实的外观, ...

  6. java core 生成路径_core文件生成和路径设置

    在程序崩溃时,内核会生成一个core文件,即程序最后崩溃时的内存映像,和程序调试信息. 之后可以通过gdb,打开core文件察看程序崩溃时的堆栈信息,可以找出程序出错的代码所在文件和函数. 1.cor ...

  7. Java相对路径读取文件

    不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的. 项目的文件夹结构: repathtest ├─sr ...

  8. java 相对路径 文件读取,Java相对路径读取文件

    Java相对路径读取文件 不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的. 项目的文件夹结构: re ...

  9. java file 相对路径 根目录修改_java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)...

    https://blog.csdn.net/my__sun_/article/details/74450241 读取文件的写法,相对路径 在当前的目录结构中读取test.txt的有四种写法 简单粗暴的 ...

最新文章

  1. 『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)
  2. 剑指Offer——Java答案
  3. Eclipse常用快捷
  4. 空降进阿里的 P10 都是什么人
  5. JavaScript使用正则表达式进行邮箱表单验证实例
  6. 详解MBR分区结构以及GPT分区结构
  7. [Ext JS 4] contentEL,renderTo, applyTo 释义与区别
  8. 东大OJ-1430-PrimeNumbers
  9. 西南科技大学计算机专业宿舍条件怎么样,西南科技大学宿舍条件,宿舍环境图片(10篇)...
  10. 2016年中国OTT盒子行业市场现状及发展前景分析
  11. 如何有效提升软件测试质量?
  12. Himall商城文件帮助类IOHelper(1)
  13. java sts安装步骤_如何安装STS
  14. 把网站部署到IIS后访问不了,报错IIS管理器无法验证此内置账户是否有访问权
  15. 如何有效的阅读开源代码
  16. Cartographer 3D建图与纯定位(在线建图、保存和纯定位)
  17. [CF1463F]Max Correct Set
  18. python爬虫爬取补天公益SRC厂商
  19. jwt token使用autho0-jwt框架使用(二)
  20. 正则表达式的语法规则

热门文章

  1. JS (intermediate value).Format is not a function问题解决
  2. tomcat(8)载入器
  3. JDBC的SQL注入漏洞
  4. spring jpa 流式_从响应式Spring Data存储库流式传输实时更新
  5. 朝着理想坚实迈进_坚实原则:开放/封闭原则
  6. java 异常处理发生异常_处理Java中的异常
  7. rxjava 背压_背压加载文件– RxJava常见问题解答
  8. neo4j 添加属性_Neo4j:动态添加属性/设置动态属性
  9. jax-rs jax-ws_快速浏览JAX-RS请求与方法匹配
  10. intellij 使用_使用IntelliJ书签