如何使用Groovy从属性文件中获取值?
我要求有一个属性文件(.properties),它将文件名作为键,并将其目标路径作为值。我需要在运行时解析密钥,具体取决于需要移动的文件。
到目前为止,我能够加载它看起来的属性,但无法从加载的属性中“获取”该值。
我提到了帖子:groovy: How to access to properties file?以下是我到目前为止的代码片段
def props = new Properties();
File propFile =
new File('D:/XX/XX_Batch/XX_BATCH_COMMON/src/main/resources/patchFiles.properties')
props.load(propFile.newDataInputStream())
def config = new ConfigSlurper().parse(props)
def ant = new AntBuilder()
def list = ant.fileScanner {
fileset(dir:getSrcPath()) {
include(name:"**/*")
}
}
for (f in list) {
def key = f.name
println(props)
println(config[key])
println(config)
def destn = new File(config['a'])
}
属性文件现在具有以下条目:
jan-feb-mar.jsp=/XX/Test/1
XX-1.0.0-SNAPSHOT.jar=/XX/Test/1
a=b
c=d
如果我使用props.getProperty('a')查找,则会返回正确的值 要么, 配置[“一”] 还尝试了代码:符号
但是只要切换到使用变量“key”,就像在config [key]中一样,它返回 - > [:]
我是groovy的新手,不能说我在这里缺少什么。
答案 0 :(得分:98)
在我看来,你太复杂了。
这是一个应该完成工作的简单示例:
对于给定的test.properties
文件:
a=1
b=2
此代码运行良好:
Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
properties.load(it)
}
def runtimeString = 'a'
assert properties."$runtimeString" == '1'
assert properties.b == '2'
答案 1 :(得分:7)
除非需要File
,并且要加载的文件位于src/main/resources
或src/test/resources
文件夹或类路径中,getResource()
是另一种解决方法。< / p>
例如
def properties = new Properties()
//both leading / and no / is fine
this.getClass().getResource( '/application.properties' ).withInputStream {
properties.load(it)
}
//then: "access the properties"
properties."my.key"
答案 2 :(得分:6)
以防万一...
如果属性键包含点(。),请记住将键放在引号中。
属性文件:
a.x = 1
常规:
Properties properties ...
println properties."a.x"
答案 3 :(得分:3)
遇到类似的问题,我们解决了它:
language: php
php:
- 5.6
- 7.0
before_script:
- cp .env.travis .env
- composer self-update
- composer install --no-interaction
- php artisan key:generate
script:
- vendor/bin/phpunit
答案 4 :(得分:0)
这是另一种方式。如果适合您,请使用它。 :)
public String firstDateOfNextMonth(){
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar today = Calendar.getInstance();
Calendar next = Calendar.getInstance();
today.clear();
Date date;
next.clear();
next.set(Calendar.YEAR, today.get(Calendar.YEAR));
next.set(Calendar.MONTH, today.get(Calendar.MONTH)+ 1);
next.set(Calendar.DAY_OF_MONTH, 1);
date = next.getTime();
Log.d(TAG, "The Date: " + dateFormat.format(date));
return dateFormat.format(date);
}
答案 5 :(得分:-1)
Source
答案 6 :(得分:-1)
具有静态方法扩展名:
Properties.metaClass.static.fromFile =
{file -> new Properties().with{new File(file).withInputStream it.&load;it}}
def properties = Properties.fromFile('test.properties')
答案 7 :(得分:-1)
Groovy 用于通过提供密钥从“local.properties”获取财产价值。
示例 - 查找此属性键的值是“mail.smtp.server”
在 V5 中
ctx.getBean("configurationService")
configurationService = ctx.getBean("configurationService")
字符串值 = configurationService.getConfiguration().getString("mail.smtp.server","")
1905 年
spring.getBean("configurationService")
configurationService = spring.getBean("configurationService")
字符串值 = configurationService.getConfiguration().getString("mail.smtp.server","")