Scala 工具組

如何讀取檔案?

語言

您可以在單一行中要求整個工具組

//> using toolkit latest

或者,您也可以只要求特定版本的 OS-Lib

//> using dep com.lihaoyi::os-lib:0.9.1

在您的 build.sbt 中,您可以新增對工具組的相依性

lazy val example = project.in(file("example"))
  .settings(
    scalaVersion := "3.2.2",
    libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
  )

或者,您也可以只要求特定版本的 OS-Lib

libraryDependencies += "com.lihaoyi" %% "os-lib" % "0.9.1"

在您的 build.sc 檔案中,您可以新增對工具組的相依性

object example extends ScalaModule {
  def scalaVersion = "3.2.2"
  def ivyDeps =
    Agg(
      ivy"org.scala-lang::toolkit:0.1.7"
    )
}

或者,您也可以只要求特定版本的 OS-Lib

ivy"com.lihaoyi::os-lib:0.9.1"

讀取檔案

假設我們有檔案路徑

val path: os.Path = os.root / "usr" / "share" / "dict" / "words"

然後我們可以使用 os.read 將整個檔案讀入字串中

val content: String = os.read(path)

要逐行讀取檔案,請替換 os.read.lines

我們可以在字典中找到最長的字詞

val lines: Seq[String]  = os.read.lines(path)
println(lines.maxBy(_.size))
// prints: antidisestablishmentarianism

如果您想要即時處理這些行,而不是一次將它們全部讀入記憶體中,則也可以使用 os.read.lines.stream。例如,如果我們只想讀取第一行,最有效率的方法是

val lineStream: geny.Generator[String] = os.read.lines.stream(path)
val firstLine: String = lineStream.head
println(firstLine)
// prints: A

OS-Lib 會在 stream 傳回的產生器耗盡後關閉檔案。

此頁面的貢獻者