views:

1775

answers:

2

Hi everyone,

I'm trying to load a properties file without using the actual path of the file. I've already done that on some other simple apps using:

InputStream inputStream = ClassLoader.getSystemResourceAsStream(PROPERTIES_FILE);
props.load(inputStream);

But this time it doesn't work. The inputStream is null for some reason. PROPERTIES_FILE is a constant defined as "app.properties". I tried to remove the .properties extension and got the same results.

Any ideas?

Thanks.

+7  A: 

The PROPERTIES_FILE constant should include the package as well as the properties file (e.g. "com/some/library/file.properties".

    final static String PROPS_FILE = "/com/some/library/file.props";
                     //The preceding  "/" is dependendant on wheterh 
                     //you are going to be giving a relative or absolute location
    InputStream is = YourCurrentClass.class.getResourceAsStream(PROPS_FILE);
jconlin
I've added the package information as you mentioned but still got the same error. BTW the method where I'm doing that call is static if that helps any...
Lancelot
Actually there was a typo when I added the package name. That solution worked great. Thanks! :)
Lancelot
You probably want to call getResourceAsStream on your class' class loader. Or probably on your class' Class.
Tom Hawtin - tackline
I believe the actual problem was he was using "ClassLoader.getSystemResourceAsStream" which looks for system resources. There is a slight difference. This is a good discussion: http://www.coderanch.com/t/369908//java/ClassLoader-getSystemResourceAsStream
sliver
+1  A: 

When getSystemResourceAsStream returns null, it means the resource was not found. Make sure the requested resource really is on the classpath at the specified location.

erickson