一尘不染

Java 8流到文件

java

假设我有一个java.util.stream.Stream对象,带有一些不错的toString方法: 将这个流写入文件
最短/最优雅的解决方案是 什么,每个流元素一行?

对于读取来说,有一个不错的Files.lines方法,因此我认为必须有一种对称的方法可以写入文件,但是找不到。
Files.write只需要一个迭代。


阅读 220

收藏
2020-12-03

共1个答案

一尘不染

也许最短的方法是使用Files.write与沿招其转换StreamIterable

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()方法。

2020-12-03