我正在开发一个使用库来加载配置文件的应用程序:
InputStream in = getClass().getResourceAsStream(resource);
我的应用程序然后打包在.jar
文件中。如果resource
位于.jar
文件中,我可以将路径指定为"/relative/path/to/resource/resource"
。
我想知道是否有可能找到资源,如果它在.jar
文件之外,在这种情况下,我将如何指定路径。
(假设我的应用程序的jar位于app/
且资源位于app/config
)。
该程序使用3 rd 方库。 该库使用该资源作为配置文件。
我还想调整配置文件,而不必一直解压缩/压缩jar文件。
答案 0 :(得分:8)
一般来说,是的,它可以。从技术上讲,类的ClassLoader
用于定位参数(see Javadoc here)中指定的资源。如果您没有使用特殊的ClassLoader
,那么您将获得引导类加载器,它将搜索类路径。因此,如果您在类路径中有目录或其他jar文件,则会搜索它们。
答案 1 :(得分:1)
它将获得适当的类加载器可用的任何资源(getClass().getClassLoader()
将返回的资源)。类加载器是否同时包含app
目录和 jar文件取决于应用程序上下文的其余部分。
答案 2 :(得分:0)
有一种获取当前目录(How to get the path of a running JAR file?)的方法,但是对于配置,您只需将-Dconfig.location
传递给JVM,指定配置的绝对路径