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

Groovy替换类似于多行字符串的文件内容的占位符,groovy,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 multilin

获取以下脚本,该脚本替换多行字符串中的值

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
输出如预期所示:

问题:

${param1} is closely related to ${param2},
so it is quite easy to make a transition.
现在,我尝试使用文件而不是多行字符串来执行相同的操作。i、 例如,将多行字符串复制到一个文件中,并使用下面的脚本执行相同的操作,但不起作用(未给出所需的结果)

我敢肯定,一定是我错过了什么。尝试了多种方法,但都没有成功

试试#1:脚本

def param1 = 'Groovy'
def param2 = 'Java'
def multiline = Eval.me(new File('test.txt').text)
println multiline
它无法运行。错误如下:

org.codehaus.groovy.control.multipleCompositionErrorsException:启动失败: Script1.groovy:1:应为EOF,在第1行第42列找到“,”。 s与${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()
方法修改文件内容。

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

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()

可以找到文件内容未评估的原因解释。

感谢您的快速回复。我想我可能做错了什么。感谢您建议的
模板
,这是我继续进行的一件好事。如果有人解释我试过的东西有什么问题,我会等你。@Rao,这里你有一个解释:感谢你花时间详细说明问题原因,并很高兴使用
模板