Java 8 流到文件

标签 java java-8 java-stream

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

对于阅读,有很好的 Files.lines 方法,所以我认为必须有一种对称的方法来写入文件,但找不到。 Files.write 只需要一个可迭代对象。

最佳答案

可能最短的方法是使用 Files.write 连同 trick它将 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() 的步骤方法。

关于Java 8 流到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054180/

相关文章:

java - Seam 上的 Facebook 分享功能

java - 安卓 : Can't decide on multiple if's or nested switch statements

java - 了解 Stream API ForEach Task 中的主循环

java - 带有 Eclipse 的 AndroidSlidingUpPanel 的问题 - 错误膨胀类

Java - JPA @Basic 和 @Embedded 注释

java - 当列表中有空值时,如何使用流获取最大日期列表

java - @FunctionalInterface 如何影响 JVM 的运行时行为?

java - 我们如何在 java.util.function.Function lambda 中有 2 个参数?

loops - Java 8 Stream 嵌套 for 循环

java - 在 Java 8 中是否有一种简洁的方法来迭代带有索引的流?