Groovy读取文件内容并替换字符串中变量的实现方法求助
Groovy读取文件内容并替换字符串中变量的实现方法求助
嘿,刚接触Groovy做技能提升的话,遇到这种变量替换问题太正常啦,我来给你捋捋怎么解决~
你现在的问题核心是:直接读取文件内容后,Groovy并不会自动把字符串里的$vName、$vCity替换成你定义的变量值,因为readFile返回的是普通字符串,不是Groovy特有的GString(字符串模板),所以没法自动解析变量。
这里给你两种实用的解决办法,按需选就行:
方法一:用SimpleTemplateEngine(推荐,安全可控)
这个是Groovy专门用来处理模板字符串的工具,能精准识别并替换变量,而且不用担心恶意代码执行的问题,适合处理外部文件模板。
代码示例:
// 如果你的环境没自带模板库,先加这个依赖(Jenkins等环境一般已经内置) @Grab('org.codehaus.groovy:groovy-templates:3.0.17') import groovy.text.SimpleTemplateEngine def vName = "John" def vCity = "NewYork" // 注意Windows路径要转义反斜杠,或者直接用正斜杠 def fData = readFile(file: "c:/data.txt") // 创建模板引擎,渲染模板 def engine = new SimpleTemplateEngine() def resolvedContent = engine.createTemplate(fData).make([ vName: vName, vCity: vCity ]) println resolvedContent.toString()
原理很简单:make()方法传入一个键值对Map,模板里的$变量名会自动匹配Map里的对应值并替换。
方法二:用GroovyShell动态解析(适合自己可控的文件)
如果你的文件内容完全是自己维护的,不会有恶意代码,可以用这个更简洁的方式,把读取到的字符串当成GString来解析:
def vName = "John" def vCity = "NewYork" def fData = readFile(file: "c:/data.txt") // 把普通字符串包裹成GString语法,然后动态执行解析 def resolvedContent = new GroovyShell().evaluate("\"${fData}\"") println resolvedContent
⚠️ 注意:这个方法会执行字符串里的Groovy代码,所以如果文件内容不可信,千万别用,会有安全风险!
另外还要提醒你:Windows路径里的反斜杠\要写成两个\\,或者直接用正斜杠/,不然会被当成转义字符导致路径识别错误哦~
备注:内容来源于stack exchange,提问作者asjadazeez
相关产品推荐
相关产品推荐

