使用Groovy从属性文件中获取值

时间:2014-01-01 17:48:45

标签: groovy properties-file

如何使用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的新手,不能说我在这里缺少什么。

8 个答案:

答案 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/resourcessrc/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","")