How to Read/Write Java Properties Files

admin  

Java properties files are just simple text files that are widely used in Java to store different properties which should not be hard coded in java source files. By convention, properties files should have the .properties extension. They have a simple structure, each line defining a key/value pair. It is also possible to define larger text values on multiple lines. The main benefit of the properties files is the one that they can be easily edited by hand using any text editor.

Java properties files can be stored in

  • in a standard folder, to a known location
  • in classpath (this way it can be packed in a jar file, made is accessible when the application runs)

There are several options to handle the Java properties files:

To read java properties files from the classpath:

The properties files can be stored in the classpath. This way they can be put inside jar files and it's really useful for web applications when the absolute location of the properties files is not known. When I tested this in an web application it didn't work:

Properties properties = new Properties() ;
URL url =  ClassLoader.getSystemResource("test.properties");
properties.load(new FileInputStream(new File(url.getFile())));

To read java properties files from the classpath in a web application:

The following example works to load the properties files in a web application. This snippet was tested on Tomcat 5.5. The '/' represents the root of the class path. Otherwise the properties file location is considered relatively to "this" class (or to MyClass for the second example).

Let's take the first example. Just create a test.properties file right in the the src folder of your application. When you compile the application the file will be copied by the compiler in the classes folder of the web app. This is where the '/test.properties' is loaded from. In a similar manner we can dedicate a folder inside the src folder to all the properties file(in that case we specify the full path like that: "/config/test.properties").

Properties properties = new Properties() ;
properties.load(this.getClass().getResourceAsStream("/test.properties"));

Similar example to use in a static context:

Properties properties = new Properties() ;
properties.load(MyClass.class.getResourceAsStream("/test.properties"));

Now we came to the second example similar to the first one, when we create the properties file in the src folder in the same location(package) where the specific class is created. The compiler will again take the task to copy the properties file in the classes folder of the webapp. As long as we load it from the same folder with the current class we no longer need to specify an location relative to the "root" folder.

Properties properties = new Properties() ;
properties.load(this.getClass().getResourceAsStream("test.properties"));

To read java properties files from a specific location:

The properties files can be loaded from any location.

Properties properties = new Properties() ;
properties.load(new FileInputStream("C:\\tmp\\test.properties"));