Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get values from properties file using Groovy

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.

like image 440
user3151610 Avatar asked Jan 01 '14 17:01

user3151610


People also ask

How do you get all values from properties file in Java?

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.

What are groovy properties?

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.


2 Answers

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' 
like image 189
JBaruch Avatar answered Sep 19 '22 13:09

JBaruch


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" 
like image 27
prayagupa Avatar answered Sep 19 '22 13:09

prayagupa