Scala 2.12.8提供了便利性特征URLBuilder和FileBuilder。这是一个如何使用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解决方案,并且没有创建临时文件。