Get values from properties file using Groovy

GroovyProperties File

Groovy Problem Overview


How to get values from properties file using Groovy?

I require to have a property file (.properties) which would have file names as key, and their destination path as the value. I will need the key to be resolved at runtime, depending on file that needs to be moved.

So far I am able to load the properties it seems but can't "get" the value from the loaded properties.

I referred to the thread : https://stackoverflow.com/questions/2055959/groovy-how-to-access-to-properties-file and following is the code snippet i have so far

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

the properties file has the following entries for now :

jan-feb-mar.jsp=/XX/Test/1
XX-1.0.0-SNAPSHOT.jar=/XX/Test/1
a=b
c=d

Correct values are returned if I look up using either props.getProperty('a') or, config['a'] Also tried the code: notation

But as soon as switch to using the variable "key", as in config[key] it returns --> [:]

I am new to groovy, can't say what am i missing here.

Groovy Solutions


Solution 1 - Groovy

It looks to me you complicate things too much.

Here's a simple example that should do the job:

For given test.properties file:

a=1
b=2

This code runs fine:

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'

Solution 2 - Groovy

Unless File is necessary, and if the file to be loaded is in src/main/resources or src/test/resources folder or in classpath, getResource() is another way to solve it.

eg.

    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"

Solution 3 - Groovy

Had a similar problem, we solved it with:

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

Solution 4 - Groovy

Just in case...

If a property key contains dot (.) then remember to put the key in quotes.

properties file:

a.x = 1

groovy:

Properties properties ...

println properties."a.x"

Solution 5 - Groovy

Properties properties = new Properties()

properties.load(new File("path/to/file.properties").newReader())

Solution 6 - Groovy

Just another way of doing it. Use this if it works for you. :)

Properties properties = new Properties()

//loading property file

File propertiesFile = new File(this.class.getResource('application.properties').getPath())

propertiesFile.withInputStream {

	properties.load(it)

}

//Accessing the value from property file

properties.getProperty('userName')

Solution 7 - Groovy

With static method extension:

Properties.metaClass.static.fromFile =
    {file -> new Properties().with{new File(file).withInputStream it.&load;it}}

def properties = Properties.fromFile('test.properties')

Solution 8 - Groovy

Groovy for getting value of property from "local.properties" by giving key.

Example- For finding value of this property's key is "mail.smtp.server"

In V5

ctx.getBean("configurationService")

configurationService = ctx.getBean("configurationService")

String value = configurationService.getConfiguration().getString("mail.smtp.server","")

In 1905

spring.getBean("configurationService")

configurationService = spring.getBean("configurationService")

String value = configurationService.getConfiguration().getString("mail.smtp.server","")

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3151610View Question on Stackoverflow
Solution 1 - GroovyJBaruchView Answer on Stackoverflow
Solution 2 - GroovyprayagupaView Answer on Stackoverflow
Solution 3 - Groovyuser3265317View Answer on Stackoverflow
Solution 4 - GroovyŁukasz DumiszewskiView Answer on Stackoverflow
Solution 5 - Groovycedaniel200View Answer on Stackoverflow
Solution 6 - GroovyVic KeyView Answer on Stackoverflow
Solution 7 - GroovyplajkoView Answer on Stackoverflow
Solution 8 - GroovyPriyanka GuptaView Answer on Stackoverflow