Loading a properties file from Java package Loading a properties file from Java package java java

Loading a properties file from Java package


When loading the Properties from a Class in the package com.al.common.email.templates you can use

Properties prop = new Properties();InputStream in = getClass().getResourceAsStream("foo.properties");prop.load(in);in.close();

(Add all the necessary exception handling).

If your class is not in that package, you need to aquire the InputStream slightly differently:

InputStream in =  getClass().getResourceAsStream("/com/al/common/email/templates/foo.properties");

Relative paths (those without a leading '/') in getResource()/getResourceAsStream() mean that the resource will be searched relative to the directory which represents the package the class is in.

Using java.lang.String.class.getResource("foo.txt") would search for the (inexistent) file /java/lang/String/foo.txt on the classpath.

Using an absolute path (one that starts with '/') means that the current package is ignored.


To add to Joachim Sauer's answer, if you ever need to do this in a static context, you can do something like the following:

static {  Properties prop = new Properties();  InputStream in = CurrentClassName.class.getResourceAsStream("foo.properties");  prop.load(in);  in.close()}

(Exception handling elided, as before.)


The following two cases relate to loading a properties file from an example class named TestLoadProperties.

Case 1: Loading the properties file using ClassLoader

InputStream inputStream = TestLoadProperties.class.getClassLoader()                          .getResourceAsStream("A.config");properties.load(inputStream);

In this case the properties file must be in the root/src directory for successful loading.

Case 2: Loading the properties file without using ClassLoader

InputStream inputStream = getClass().getResourceAsStream("A.config");properties.load(inputStream);

In this case the properties file must be in the same directory as the TestLoadProperties.class file for successful loading.

Note: TestLoadProperties.java and TestLoadProperties.class are two different files. The former, .java file, is usually found in a project's src/ directory, while the latter, .class file, is usually found in its bin/ directory.