How to read a properties file in a web application
The code to do this is pretty simple. But going by the number of people who keep asking this question, i thought i would post the code over here. Let's consider that you have a war file named SampleApp.war which has a properties file named myApp.properties at it's root :
SampleApp.war | |-------- myApp.properties | |-------- WEB-INF | |---- classes | |----- org |------ myApp |------- MyPropertiesReader.class
Here root folder in war is equivalent to Source Folder in Netbeans.
That means you have to keep your properties file in default package of your Source Files folder.
Let's assume that you want to read the property named "abc" present in the properties file:
----------------
myApp.properties:
----------------
abc=some value
xyz=some other value
Let's consider that the class org.myApp.MyPropertiesReader present in your application wants to read the property. Here's the code for the same:
package org.myapp; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * Simple class meant to read a properties file * * @author Jaikiran Pai * */ public class MyPropertiesReader { /** * Default Constructor * */ public MyPropertiesReader() { } /** * Some Method * * @throws IOException * */ public void doSomeOperation() throws IOException { // Get the inputStream InputStream inputStream = this.getClass().getClassLoader() .getResourceAsStream("myApp.properties"); Properties properties = new Properties(); System.out.println("InputStream is: " + inputStream); // load the inputStream using the Properties properties.load(inputStream); // get the value of the property String propValue = properties.getProperty("abc"); System.out.println("Property value is: " + propValue); } }
Pretty straight-forward. Now suppose the properties file is not at the root of the application, but inside a folder (let's name it config) in the web application, something like:
SampleApp.war | |-------- config | |------- myApp.properties | | |-------- WEB-INF | |---- classes | |----- org |------ myApp |------- MyPropertiesReader.class
There will just be one line change in the above code:
public void doSomeOperation() throws IOException { //Get the inputStream-->This time we have specified the folder name too. InputStream inputStream = this.getClass().getClassLoader() .getResourceAsStream("config/myApp.properties"); Properties properties = new Properties(); System.out.println("InputStream is: " + inputStream); //load the inputStream using the Properties properties.load(inputStream); //get the value of the property String propValue = properties.getProperty("abc"); System.out.println("Property value is: " + propValue); }
That's all that is required to get it working.
Please note that in case you are using doSomeOperation as a static method, then you won't be able to use this keyword in the code.
ReplyDeleteFor that you need to replace this by Property.class
But it would not work.
You also need to remove .getClass() as .getClass() would return Class and not Property
Hence the working code would be something like the following
Property.class.getClassLoader().getResourceAsStream("Resource.properties");