【发布时间】:2020-09-06 20:59:16
【问题描述】:
我想流式传输文件中包含的行,但在处理每个文件后将其移动到另一个文件夹。
目前的流程是这样的:
解释:
- 我创建了
Stream的Files - 我为每个人创建一个
BufferedReader - 我
flatMap到BufferedReader的行Stream - 我打印每一行。
代码(为简单起见省略了例外):
(1) Stream.generate(localFileProvider::getNextFile)
(2) .map(file -> new BufferedReader(new InputStreamReader(new FileInputStream(file))))
(3) .flatMap(BufferedReader::lines)
(4) .map(System.out::println)
.MOVE_EACH_FILE_FROM_INPUT_FOLDER_TO_SOME_OTHER_FOLDER;
是否可以在每个文件被完全读取后移动它并继续处理流中的其他文件?
【问题讨论】:
-
有趣的问题。尽管我担心一旦映射文件,您就会丢失有关文件的所有信息。这就像有一条水流,您将每一滴水映射到苏打水(通过添加二氧化碳),然后通过添加糖浆将每一滴苏打水映射到可乐,最后您将 System.our.println 放入玻璃杯中 - 但是一旦您喝了一杯可乐,你想把水拿回来。你不能在一个循环中按顺序处理它,而不是映射吗?即使它不那么性感。
-
你能用
.forEach关闭输入流和移动文件吗? -
流中的元素,我们只是一个一个地处理,我们无法删除它们,所以虽然删除流中的元素(不可能)从初始文件中删除行也是不可能的。
标签: java java-8 java-stream