这个问题在这里已经有一个答案:>
Modify file using Files.lines1
假设我有一个java.util.stream.Stream对象与一些很好的toString方法:
将此流写入文件的最短/最优雅的解决方案是什么?每个流元素一行?
假设我有一个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()方法.