For a few days now, I have been trying to get my Java project to load some properties from a file located in it’s JAR file. However, I am constantly getting a null pointer when trying to load in the file.
The folder hierarchy has the properties file in /data, and all the source files in /emp/**/** …
Code
Properties defaultProps = new Properties();
try {
InputStream in = getClass().getClassLoader().getResourceAsStream("data/build_info.properties");
//InputStream in = new URL("file:data/build_info.properties").openStream();
defaultProps.load(in);
in.close();
} catch (FileNotFoundException e) {
//e.printStackTrace();
} catch (IOException e) {
//e.printStackTrace();
} catch (NullPointerException e){
Log.E("NPE- Properties not loaded", "properties");
revision = "Properties file not found";
}
if (defaultProps.getProperty("build.major.number") == null) {
Log.W("Properties not loaded", "properties");
revision = "Properties file not found";
} else {
Log.V("Properties Loaded Successfully", "properties");
revision = "Version: " + defaultProps.getProperty("build.major.number")
+ "." + defaultProps.getProperty("build.minor.number") + " "
+ "Revision: "
+ defaultProps.getProperty("build.revision.number");
}
If
datais in the root of your jar, and ifbuild_info.propertiesis inside the data directory in the jar, and if the jar is on the classpath, thengetClass().getClassLoader().getResourceAsStream("data/build_info.properties");will find that properties file. You could also usegetClass().getResourceAsStream("/data/build_info.properties");.Peculiarities can arise if
getClass()returns a class loaded by a classloader different than the one that has your jar on its classpath.