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

在intellij中运行scala程序时模拟来自stdin的输入,scala,intellij-idea,io-redirection,Scala,Intellij Idea,Io Redirection,有没有办法将命令行args配置为intellij以进行stdin重定向 大致如下: 运行|编辑运行配置|脚本参数 /shared/java/paf-rules.properties 2 < /shared/java/testdata.csv /shared/java/paf-rules.properties 2

有没有办法将命令行args配置为intellij以进行stdin重定向

大致如下:

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

/shared/java/paf-rules.properties 2 < /shared/java/testdata.csv
/shared/java/paf-rules.properties 2
不幸的是,没有-至少没有直接在运行配置中

afaik,你能做的最好的事情是:

  • 修改脚本/程序,使其运行时不带参数(读取
    System.in
    )或带有文件名参数(读取文件)

  • 制作一个按上述方式运行的包装器脚本/程序

希望这有帮助


vikingsteve

这是一个解决方案模板,它有以下选项:

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

此代码段需要使用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
        }
    }
  }
类StringInputStream(str:String)扩展了InputStream{
var ptr=0
var len=str.length
重写def read():Int={
如果(ptr
我创建了一个支持stdin/file/herdoc的模板:下面的答案中显示的代码。这应该与这个模板合并,因为它是针对scala的(并且比另一个模板早四年),所以不需要合并。
  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
        }
    }
  }