Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

Is it possible to add a relative directory (ie, foo/bar/plugh) to the java classpath and use

InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties");

To fetch foo/bar/plugh/xyzzy.properties?

My classpath looks like this:

foo.jar;foo/bar/plugh;xyz.jar

And I am able to use classes and resources from both foo and xyz jars but not from the plugh directory. In those cases, in is always null.

I can't get this to work and am not sure if this is just unsupported, I am missing something subtle or if I'm doing something wrong. Do I need to use an absolute path?

share|improve this question
How did you set this classpath? Like the following example? java -classpath foo.jar;foo/bar/plugh;xyz.jar – David García González May 20 '09 at 12:31

1 Answer

up vote 6 down vote accepted

Maybe I'm misunderstanding what you're trying to do, but if you have a folder in your classpath, that means all the files underneath it should be in the classpath as well. If not, you can always pass each .properties file on the class path.

But either way, since the file/folder that contains the file is in the classpath, you should just be able to do:

InputStream in = new FileInputStream("classpath:xyz.properties")

And since "foo/bar/plugh" is in the classpath, one of the places it will look for xyz.properties is in "foo/bar/plugh".

share|improve this answer
For some reason this isn't working for me when my app runs via a batch file build by codehaus maven appassmebler. Absolute paths work but relative ones don't. – sal May 11 '09 at 19:01
2  
The only thing I can think of is if the relative path you have in your classpath is being resolved based on where the program is run. For example if I have the batch file in the C:\myapp\bin directory, the "base" path might be C:\myapp\bin, not C:\myapp. If that is the case, it would be trying to resolve "C:\myapp\bin\foo\bar\plugh\xyz.properties". – Alex Beardsley May 12 '09 at 19:55
It worked for me with the absolute path of the directory. But it is very strange because I tried before with the code: <code>InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties"); </code> What is the difference between these two methods? Thanks. – David García González May 20 '09 at 12:19
Is there any way to get this properties with the method: ResourceBundle.getBundle("xyz"); Thanks. – David García González May 20 '09 at 12:27
@David I think as long as "xyz.properties" is in your classpath, it should get picked up with getBundle() – Alex Beardsley May 22 '09 at 13:49
show 1 more comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.