在intellij中运行程序时模拟stdin的输入

jav*_*dba 38 scala intellij-idea io-redirection

有没有办法将命令行参数配置为intellij进行stdin重定向?

有点像:

运行| 编辑运行配置| 脚本参数

/shared/java/paf-rules.properties 2 < /shared/java/testdata.csv
Run Code Online (Sandbox Code Playgroud)

vik*_*eve 15

不幸的是,没有 - 至少不是直接在运行配置中.

你能做的最好的事情就是:

  • 修改您的脚本/程序以运行没有args(读取System.in)或使用文件名参数(读取文件)

  • 制作一个以上述方式行事的包装脚本/程序.

希望这可以帮助,

vikingsteve


jav*_*dba 1

以下是解决方案的模板,其中包含以下选项:

  • 标准输入
  • 文件
  • 程序中的“heredoc”(最有可能对测试有用)

  val input = """ Some string for testing ... """

  def main(args: Array[String]) {
    val is = if (args.length >= 1) {
      if (args(0) == "testdata") {
        new StringInputStream(input)
      } else {
        new FileInputStream(args(0))
      }
    } else {
      System.in
    }
    import scala.io._
    Source.fromInputStream(is).getLines.foreach { line =>
Run Code Online (Sandbox Code Playgroud)

此代码片段需要使用 StringInputStream - 如下所示:

  class StringInputStream(str : String) extends InputStream {
    var ptr = 0
    var len = str.length
    override def read(): Int = {
        if (ptr < len) {
          ptr+=1
          str.charAt(ptr-1)
        } else {
         -1
        }
    }
  }
Run Code Online (Sandbox Code Playgroud)