将相对目录添加到java类路径并使用ClassLoader().getResourceAsStream(";)

将相对目录添加到java类路径并使用ClassLoader().getResourceAsStream(";),java,directory,classpath,classloader,Java,Directory,Classpath,Classloader,是否可以将相对目录(即foo/bar/plugh)添加到java类路径并使用 InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties"); 要获取foo/bar/plugh/xyzy.properties 我的类路径如下所示: foo.jar;foo/bar/plugh;xyz.jar 我能够使用来自foo和xyz jar的类和资源,但不能使用来自plugh目录的类和资源。在这些情况下,中的始终为空 我

是否可以将相对目录(即foo/bar/plugh)添加到java类路径并使用

InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties");
要获取foo/bar/plugh/xyzy.properties

我的类路径如下所示:

foo.jar;foo/bar/plugh;xyz.jar 
我能够使用来自foo和xyz jar的类和资源,但不能使用来自plugh目录的类和资源。在这些情况下,中的
始终为空


我无法让它工作,也不确定这是否只是不受支持,我错过了一些微妙的东西,或者我是否做错了什么。我需要使用绝对路径吗?

也许我误解了你的意图,但是如果你的类路径中有一个文件夹,那意味着它下面的所有文件也应该在类路径中。如果没有,则始终可以传递类路径上的每个.properties文件

但无论哪种方式,由于包含该文件的文件/文件夹位于类路径中,您应该能够执行以下操作:

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

由于“foo/bar/plugh”在类路径中,它将查找xyz.properties的一个位置在“foo/bar/plugh”中。

由于某种原因,当我的应用程序通过codehaus maven appassmebler生成的批处理文件运行时,这对我不起作用。绝对路径有效,但相对路径无效。我唯一能想到的是,类路径中的相对路径是否正在根据程序运行的位置进行解析。例如,如果批处理文件位于C:\myapp\bin目录中,“基本”路径可能是C:\myapp\bin,而不是C:\myapp。如果是这种情况,它将尝试解析“C:\myapp\bin\foo\bar\plugh\xyz.properties”。它在目录的绝对路径下对我有效。但这很奇怪,因为我以前尝试过以下代码:
InputStream in=getClassLoader().getResourceAsStream(“xyzy.properties”)这两种方法的区别是什么?谢谢。有没有办法通过以下方法获取此属性:ResourceBundle.getBundle(“xyz”);谢谢。@David我想只要“xyz.properties”在你的类路径中,就应该用getBundle()获取它。你是如何设置这个类路径的?比如下面的例子?java-classpath foo.jar;foo/bar/plugh;xyz.jar