假设我有一个 java.util.stream.Stream
对象和一些不错的 toString
方法:
将此流写入文件的最短/最优雅的解决方案是什么,每个流元素一行?
对于阅读,有很好的 Files.lines
方法,所以我认为必须有一种对称的方法来写入文件,但找不到。
Files.write
只需要一个可迭代对象。
最佳答案
可能最短的方法是使用 Files.write
连同 trick它将 Stream
到Iterable
:
Files.write(Paths.get(filePath), (Iterable<String>)stream::iterator);
例如:
Files.write(Paths.get("/tmp/numbers.txt"),
(Iterable<String>)IntStream.range(0, 5000).mapToObj(String::valueOf)::iterator);
如果它看起来太骇人听闻,请使用更明确的方法:
try(PrintWriter pw = new PrintWriter(Files.newBufferedWriter(
Paths.get("/tmp/numbers.txt")))) {
IntStream.range(0, 5000).mapToObj(String::valueOf).forEach(pw::println);
}
如果您有一些自定义对象的流,您可以随时添加 .map(Object::toString)
申请 toString()
的步骤方法。
关于Java 8 流到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054180/