流式传输文件并在读取后移动它们

流式传输文件并在读取后移动它们,第1张

流式传输文件并在读取后移动它们

您可以将关闭动作链接到流,如果发生

flatMap
以下情况,该动作将自动执行

Stream.generate(localFileProvider::getNextFile).takeWhile(Objects::nonNull)    .flatMap(file -> {        try { Path p = file.toPath(); return Files.lines(p, Charset.defaultCharset()).onClose(() -> {     try { // move path/x/y/z to path/x/y/z.moved         Files.move(p, p.resolveSibling(p.getFileName()+".moved"));     } catch(IOException ex) { throw new UncheckedIOException(ex); } });        } catch(IOException ex) { throw new UncheckedIOException(ex); }    })    .forEach(System.out::println);

状态文档

onClose
很重要:

当在

close()
流上调用该方法时,将运行关闭处理程序,并按添加顺序执行。

因此,在已经存在的关闭处理程序之后执行移动关闭处理程序,该关闭处理程序将关闭用于读取行的文件句柄。

我曾经

Charset.defaultCharset()
模仿
new InputStreamReader(newFileInputStream(file)))
问题代码的嵌套构造函数的行为,但通常情况下,应尽可能使用固定的字符集,例如
Files.lines
默认的UTF-8。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5017035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存