相当于groovy中的perl diamond/python文件输入?

相当于groovy中的perl diamond/python文件输入?,groovy,Groovy,我正在寻找一个函数或运算符(可能是一个库),模仿或 当然,我可以检查自己的参数,确保每个参数都是一个文件并循环通过,如果不存在,则从stdin读取…但这违背了一个目的:在几秒钟内创建需要循环通过文件或stdin(如cat、grep、sed等)的小unix命令行脚本。无需编写30行样板代码…只有一两行 def inputs=[]; 唯一实用的方法是收集“相似对象”。在这种情况下,拥有InputStream集合就可以了 if(args.length==0) { inputs.add(Sys

我正在寻找一个函数或运算符(可能是一个库),模仿或

当然,我可以检查自己的参数,确保每个参数都是一个文件并循环通过,如果不存在,则从stdin读取…但这违背了一个目的:在几秒钟内创建需要循环通过文件或stdin(如cat、grep、sed等)的小unix命令行脚本。无需编写30行样板代码…只有一两行

def inputs=[];
唯一实用的方法是收集“相似对象”。在这种情况下,拥有InputStream集合就可以了

if(args.length==0)
{
    inputs.add(System.in)
}
else  {
    args.each {
        inputs.add(new FileInputStream(it))    
    }
}

inputs.each {
    (it).eachLine { line -> println(line) }
}

据我所知,没有这样的内置函数/库

无论如何,如果您的目标是生成脚本并循环文件或stdin,那么您可以创建类似于groovy库的东西。例如:

FileInput.groovy:

然后编译上述代码并将生成的类放在
~/.groovy/lib
下:

$ groovyc -d ~/.groovy/lib FileInput.groovy
然后您可以在脚本中使用它

test.groovy

所以

$ groovy test.groovy example.txt
LINE ONE
LINE TWO
LINE THREE
没有文件时默认为stdin:

$ groovy test.groovy < example.txt
LINE ONE
LINE TWO
LINE THREE

$ cat example.txt | groovy test.groovy
LINE ONE
LINE TWO
LINE THREE

$ groovy test.groovy
hello
HELLO
world
WORLD
现在(因为它正在测试
isFile()
)也忽略了不存在的文件:

$ groovy test.groovy example.txt wrongFile.txt example.txt
LINE ONE
LINE TWO
LINE THREE
LINE ONE
LINE TWO
LINE THREE

args.each{new File(it).eachLine{line->println(line)}}Thansk获取您的提示。它对于快速和肮脏的脚本来说已经足够好了,但是它不会自动恢复到stdin(我想我可以在前面用if语句检查),更重要的是它不会自动处理后面的内容(例如FileNotFoundException)。我真的很好,所以我一定会用它!谢谢
$ groovy test.groovy < example.txt
LINE ONE
LINE TWO
LINE THREE

$ cat example.txt | groovy test.groovy
LINE ONE
LINE TWO
LINE THREE

$ groovy test.groovy
hello
HELLO
world
WORLD
$ groovy test.groovy example.txt testDir
LINE ONE
LINE TWO
LINE THREE
$ groovy test.groovy example.txt wrongFile.txt example.txt
LINE ONE
LINE TWO
LINE THREE
LINE ONE
LINE TWO
LINE THREE