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 : 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.
Get All Key Values from Properties File Get All Key Values from Properties File in java using the Properties class Available in java. util Package. The Properties class extends the Hashtable class. From Hashtable, Properties class inherits the Method KeySet() which Returns a Set view of the keys Contained in this Map.
When a Groovy class definition declares a field without an access modifier, then a public setter/getter method pair and a private instance variable field is generated which is also known as "property" according to the JavaBeans specification.
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'
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"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With