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.