在 Scala 中,读取指定路径包含多个环境变量的文件

In Scala, read a file where specified path includes multiple environment variables

对于文件路径名如

val path = "$HOME/projects/$P1/myFile.txt"

有没有比这更简单的解析路径和读取myFile.txt的方法,

import java.io.File
val resolvedPath = path.split(File.separator).map{ s => 
      if (s.startsWith("$")) sys.env(s.drop(1)) 
      else s }.
    mkString(File.separator)

val res = io.Source.fromFile(resolvedPath).getLines

参见 System.getenv()。您将能够找到变量并将它们替换为解析路径的值。

我觉得你的方法不错,但如果你很想或需要快速做某事,你可以使用 Process 来获得执行 [=24= 的 return ] 命令:

import scala.sys.process._
val cleanedPath = Seq("bash", "-c", "echo " + path).!!.trim

如果你愿意,你甚至可以使用这个想法来读取文件:

val text = Seq("echo", "-c", "cat " + path).!!

这些代码与您的代码之间的一个区别是,如果缺少环境变量,您的代码将抛出异常,而 bash return 是该变量的空字符串。如果你想模仿它,你可以使用 sys.env.get(s.tail).getOrElse("") 而不是 sys.env(s.drop(1)) 或使用字典 val myEnv = sys.env.withDefaultValue("").