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

use*_*610 40 groovy properties-file

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

我需要一个属性文件(.properties),它将文件名作为键,并将其目标路径作为值.我需要在运行时解析密钥,具体取决于需要移动的文件.

到目前为止,我能够加载它看起来的属性,但不能从加载的属性"获取"值.

我提到了线程:groovy:如何访问属性文件?以下是我到目前为止的代码片段

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'])

    }
Run Code Online (Sandbox Code Playgroud)

属性文件现在具有以下条目:

jan-feb-mar.jsp=/XX/Test/1
XX-1.0.0-SNAPSHOT.jar=/XX/Test/1
a=b
c=d
Run Code Online (Sandbox Code Playgroud)

如果我使用props.getProperty('a')或config ['a']查找,则返回正确的值.还尝试了代码:notation

但是一旦切换到使用变量"key",就像在config [key]中一样,它返回 - > [:]

我是groovy的新手,不能说我在这里失踪了什么.

JBa*_*uch 108

在我看来,你太复杂了.

这是一个应该完成工作的简单示例:

对于给定的test.properties文件:

a=1
b=2
Run Code Online (Sandbox Code Playgroud)

这段代码运行正常:

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'
Run Code Online (Sandbox Code Playgroud)

  • 断言只是为了证明它有效.当然,您的代码中不需要它们.在答案中添加了评论. (3认同)
  • 知道了。示例已更改。 (2认同)

pra*_*upd 7

除非File是必要的,如果要加载的文件是src/main/resources或者src/test/resources文件夹或类路径,getResource()是另一种方式来解决这个问题.

例如.

    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"
Run Code Online (Sandbox Code Playgroud)


Łuk*_*ski 6

以防万一...

如果属性键包含点(.),请记住将键放在引号中.

属性文件:

a.x = 1
Run Code Online (Sandbox Code Playgroud)

常规:

Properties properties ...

println properties."a.x"
Run Code Online (Sandbox Code Playgroud)


小智 6

有一个类似的问题,我们解决了它:

def content = readFile 'gradle.properties'

Properties properties = new Properties()
InputStream is = new ByteArrayInputStream(content.getBytes());
properties.load(is)

def runtimeString = 'SERVICE_VERSION_MINOR'
echo properties."$runtimeString"
SERVICE_VERSION_MINOR = properties."$runtimeString"
echo SERVICE_VERSION_MINOR
Run Code Online (Sandbox Code Playgroud)