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

sal*_*sal 5 java directory classpath classloader

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

InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties");
Run Code Online (Sandbox Code Playgroud)

要获取foo/bar/plugh/xyzzy.properties?

我的classpath看起来像这样:

foo.jar;foo/bar/plugh;xyz.jar 
Run Code Online (Sandbox Code Playgroud)

我可以使用foo和xyz jar中的类和资源,但不能使用plugh目录.在这些情况下,in始终为null.

我不能让这个工作,我不确定这是否只是不支持,我错过了一些微妙或我做错了什么.我需要使用绝对路径吗?

Ale*_*ley 6

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

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

InputStream in = new FileInputStream("classpath:xyz.properties")
Run Code Online (Sandbox Code Playgroud)

由于"foo/bar/plugh"位于类路径中,因此xyz.properties所在的位置之一位于"foo/bar/plugh"中.

  • 我唯一能想到的是你的类路径中的相对路径是根据程序的运行位置来解决的.例如,如果我在C:\ myapp\bin目录中有批处理文件,则"基本"路径可能是C:\ myapp\bin,而不是C:\ myapp.如果是这种情况,它将尝试解析"C:\ myapp\bin\foo\bar\plugh\xyz.properties". (2认同)