【发布时间】:2020-05-19 19:07:02
【问题描述】:
我想流式传输文件中包含的行,但在处理完每个文件后将其删除。
目前的流程是这样的:
解释:
- 我创建了一个文件流
- 我为它们中的每一个创建一个 BufferedReader
- 我将平面映射到 BufferedReader 的行流
- 我打印每一行。
代码:
(1) Stream.generate(localFileProvider::getNextFile)
(2) .map(file -> return new BufferedReader(new InputStreamReader(new FileInputStream(file))))
(3) .flatMap(BufferedReader::lines)
(4) .map(System.out::println);
是否可以在完全读取每个文件后将其删除并继续处理流中的其他文件?
谢谢!
【问题讨论】:
-
流有
onClose(Runnable)方法。我没有尝试并从头顶写下来,但是我想到了Stream.generate(...).flatMap(file -> new BufferedReader(new InputStreamReader(new FileInputStream(file))).lines().onClose(() -> file.delete()))。不确定是否有可能,可能是因为没有关闭 BufferedReader 或检查的异常会破坏 lambda。 -
你能解释一下为什么你不想遍历每个文件,流式传输它的行,然后删除那个文件吗?还是像您一样进行流式传输,然后删除所有文件?
-
file -> return …不是有效的 lambda 表达式。此外,new FileInputStream(…)要求您捕获IOException。此外,.map(System.out::println)不是一个有效的操作,因为println不返回值,但您很可能希望改为执行forEach。 -
我想加载复制到特定目录的每个文件的内容。答案已经给出,我提出了一个新问题,因为我的场景不够精确:stackoverflow.com/questions/61914029/…
标签: java java-8 java-stream