Groovy替换文件内容的占位符类似于多行字符串

时间:2016-06-27 04:59:05

标签: groovy

获得以下脚本,用于替换多行字符串中的值。

def param1 = 'Groovy'
def param2 = 'Java'
def multiline = """
${param1} is closely related to ${param2},
so it is quite easy to make a transition.
"""
//output shows with the replaced values for param1 and param2
println multiline

输出显示为预期:

Groovy is closely related to Java,
so it is quite easy to make a transition.

问题:

现在我尝试使用文件而不是多行字符串来做同样的事情。即,将多行字符串复制到一个文件,并使用下面的脚本执行相同但不工作(不给出所需的结果)。

我确信,这一定是我所缺少的。尝试多种方式,但是徒劳无功。

尝试#1 :脚本

def param1 = 'Groovy'
def param2 = 'Java'
def multiline = Eval.me(new File('test.txt').text)
println multiline

它无法运行。错误如下:

  

org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:   Script1.groovy:1:期待EOF,找到','@第1行,第42栏。      与$ {param2}密切相关的,                                    ^   
1错误

尝试#2

def param1 = 'Groovy'
def param2 = 'Java'
def multiline = new File('test.txt').text
def finalContent = """$multiline"""
println finalContent

输出没有区别,只是显示文件内容。

输出:

${param1} is closely related to ${param2},
so it is quite easy to make a transition.

任何指针我错过了什么?

请注意,目前我想避免使用replace()方法修改文件内容。

1 个答案:

答案 0 :(得分:2)

不确定为什么它不起作用,但我在这里建议的是templating最适合这里。请看一下:

import groovy.text.SimpleTemplateEngine

def f = new File('lol.txt')
println f.text

def binding = [
    param1: 'Groovy',
    param2: 'Java',
]

def engine = new SimpleTemplateEngine()
def template = engine.createTemplate(f.text).make(binding)

println template.toString()

可以找到解释为什么不评估文件内容的原因here