实施新的Scala Process特性,例如URLBuilder和FileBuilder

时间:2019-06-11 02:40:09

标签: scala process

Scala 2.12.8提供了便利性特征URLBuilderFileBuilder。这是一个如何使用FileBuilder的示例:

def run(input: java.io.File, cmdSeq: String*): String = {
  import scala.sys.process._
  (input #> Process(cmdSeq)).!!.trim
}

# Run jq against the contents of test.json
run(new java.io.File("test.json"), "jq", "-r", ".property")

我想定义和实现类似的特征,我们可以称其为InStreamBuilder。使用此特征将导致java.io.InputStream被馈送到Scala流程的标准输入中。这是我想如何使用它的一个例子。用法与上面的示例非常相似:

def run(input: java.io.InputString, cmdSeq: String*): String = {
  import scala.sys.process._
  (input #> Process(cmdSeq)).!!.trim
}

# Run jq against the json in the string
val json = """{ "property": "asdf" }"""
val inStream = new java.io.ByteArrayInputStream(input.getBytes)
run(inStream, "jq", "-r", ".property")

这肯定很容易...但是我对如何编写trait实现并不陌生:)

是的,我知道这可以用Java完成。我正在按照我描述的方式寻找一种100%Scala解决方案,并且没有创建临时文件。

0 个答案:

没有答案