gpt4 book ai didi

java-8 - Java 8 Path Stream 和 FileSystemException(打开的文件太多)

转载 作者:行者123 更新时间:2023-12-04 16:51:03 28 4
gpt4 key购买 nike

天才!

我正在练习 Java 8。

所以如果我做这样的事情:

Files.walk(Paths.get(corpusPathStr))
.filter(path -> path.toFile().isFile())
.forEach(path -> {
try {
Files.lines(path)
.forEach(...);
} catch (IOException e) {
e.printStackTrace();
}
});

我收到 FileSystemException 错误。

如果我在forEach下打开一个文件,会不会打开太多文件?

还是有其他原因导致 FileSystemException(打开的文件太多)?

提前感谢您的帮助!

最佳答案


try(Stream<Path> stream = Files.walk(Paths.get(corpusPathStr))) {
stream.filter(path -> Files.isRegularFile(path) && Files.isReadable(path))
.flatMap(path -> {
try { return Files.lines(path); }
catch (IOException e) { throw new UncheckedIOException(e); }
})
.forEach(...);
}
catch(UncheckedIOException ex) {
throw ex.getCause();
}
Files.walk 返回的流和 Files.lines必须正确关闭以释放资源,您可以通过 try(…) 执行此操作。在 flatMap 的映射函数中构造或返回它们手术。

不要使用嵌套 forEach s。
UncheckedIOException可能不仅由我们的映射函数抛出,还可能由流实现抛出。将其翻译回 IOException允许平等对待他们。

关于java-8 - Java 8 Path Stream 和 FileSystemException(打开的文件太多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43067269/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com