【问题标题】:What is the equivalent of Files.lines() in Kotlin?Kotlin 中 Files.lines() 的等价物是什么?
【发布时间】:2019-07-27 15:48:08
【问题描述】:

Kotlin 中是否有 Java Files.lines() 的等价物?

我要转换的Java代码类似于

Stream<String> lines =
  Files.list(Paths.get(dir_in))
  .flatMap((Files::lines));

// do something with my stream

lines.close();

我对通过关闭 Stream 释放所有文件系统资源的能力感兴趣。

提前致谢。

【问题讨论】:

  • kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.io.-file/…。或者你可以在 Kotlin 中使用与 Java 中相同的东西。
  • 首先,在Java中使用try-with-resources!!
  • 我已经尝试过 File::useLines 但它没有返回序列,当我“欺骗”它返回一个序列 () 时,它不能使用,因为资源已关闭(如 useLines 中所述)
  • 整个想法是使用块内部的序列,以确保它始终安全关闭,这与您的 Java 代码所做的不同。但同样,您可以在 Kotlin 中使用 Streams。
  • @BoristheSpider - 你是对的,Stream 实现了 AutoCloseable。但是这里的 Java 代码只是为了说明目的

标签: kotlin


【解决方案1】:

我会使用File#bufferedReader

它返回一个BufferedReader,您可以(a) 在需要时关闭它,(b) 使用BufferedReader#lines 获取行流。

这是一些示例代码。

val buffer: BufferedReader = File("hi.txt").bufferedReader()
val stream: Stream<String> = buffer.lines()
stream.forEach { println(it) }
buffer.close()

您应该尽可能使用File#useLines 函数,因为它会自动关闭蒸汽。

【讨论】:

    猜你喜欢
    • 2022-11-15
    • 2016-04-10
    • 2017-10-29
    • 2019-12-26
    • 1970-01-01
    • 2018-12-22
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多