在 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("")
.
对于文件路径名如
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("")
.