getResourceAsStream() 可以找到 jar 文件之外的文件吗?
我正在开发一个应用程序,该应用程序使用一个加载配置文件的库:
InputStream in = getClass().getResourceAsStream(resource);
我的应用程序然后打包在 .jar
文件中。如果 resource
位于 .jar
文件内,我可以将路径指定为 "/relative/path/to/resource/resource"
。
我想知道如果资源位于 .jar
文件之外,是否可以找到该资源,在这种情况下,我将如何指定路径。
(假设我的应用程序的 jar 位于 app/
中,资源位于 app/config
中)。
该程序使用第三方库。 该库使用该资源作为配置文件。
我还想调整配置文件,而不必一直解压缩 jar 文件。
I'm developing an application that uses a library that loads a configuration file as:
InputStream in = getClass().getResourceAsStream(resource);
My application in then packed in a .jar
file. If resource
is inside the .jar
file, I can specify the path as "/relative/path/to/resource/resource"
.
I'd like to know if is it possible to find the resource if it is outside the .jar
file, and in this case, how would I specify the path.
(Assuming my application's jar is in app/
and the resource is in app/config
).
The program uses a 3rd party library.
The library uses the resource as a configuration file.
I also want to tweak the configuration file without having to unzip/zip the jar file all the time.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一般来说,是的,可以。从技术上讲,类的
ClassLoader
用于定位参数中指定的资源 (请参阅此处的 Javadoc)。如果您没有使用特殊的ClassLoader
,那么您将获得引导类加载器,它会搜索类路径。因此,如果类路径上有目录或其他 jar 文件,则会搜索它们。In general, yes it can. Technically, the class's
ClassLoader
is used to locate the resource named in the parameter (see Javadoc here). If you're not using a specialClassLoader
then you'll get the bootstrap class loader, which searches the class path. So, if you have directories or other jar files on the classpath, they will be searched.它将获取适当的类加载器可用的任何资源(
getClass().getClassLoader()
将返回的资源)。类加载器是否包含app
目录和 jar 文件取决于应用程序上下文的其余部分。It will get any resource which is available to the appropriate classloader (the one that
getClass().getClassLoader()
would return). Whether the classloader includes both theapp
directory and the jar files depends on the rest of your application context.有一种方法可以获取当前目录( 如何获取正在运行的 JAR 文件的路径?),但对于配置,您只需将
-Dconfig.location
传递给 JVM,指定配置的绝对路径There is a way to get the current directory ( How to get the path of a running JAR file?), but for configuration you can just pass a
-Dconfig.location
to the JVM specifying an absolute path for the configuration