Java getResourceAsStream()能否找到jar文件之外的文件?
我正在开发一个应用程序,它使用一个库将配置文件加载为:Java getResourceAsStream()能否找到jar文件之外的文件?,java,resources,jar,Java,Resources,Jar,我正在开发一个应用程序,它使用一个库将配置文件加载为: InputStream in = getClass().getResourceAsStream(resource); 然后将我的应用程序打包到.jar文件中。如果resource在.jar文件中,我可以将路径指定为“/relative/path/to/resource/resource” 我想知道如果资源在.jar文件之外,是否可以找到它,在这种情况下,我将如何指定路径 (假设我的应用程序的jar位于app/中,而资源位于app/conf
InputStream in = getClass().getResourceAsStream(resource);
然后将我的应用程序打包到.jar
文件中。如果resource
在.jar
文件中,我可以将路径指定为“/relative/path/to/resource/resource”
我想知道如果资源在.jar
文件之外,是否可以找到它,在这种情况下,我将如何指定路径
(假设我的应用程序的jar位于app/
中,而资源位于app/config
)
该程序使用第三方库。 库将资源用作配置文件
我还想调整配置文件,而不必一直解压缩jar文件 它将获得适当类加载器可用的任何资源(将返回
getClass().getClassLoader()
的资源)。类加载器是否同时包含app
目录和jar文件取决于应用程序上下文的其余部分。通常,它可以。从技术上讲,类的ClassLoader
用于定位参数()中命名的资源。如果您没有使用特殊的类加载器
,那么您将获得引导类加载器,它将搜索类路径。因此,如果类路径上有目录或其他jar文件,则会对它们进行搜索。有一种方法可以获取当前目录(),但是对于配置,您只需将-Dconfig.location
传递给JVM,为配置指定一个绝对路径@并且库将资源用作配置文件(它是第三方库)。我还想调整配置文件,而不必一直解压缩jar文件。事实上,我忘了问我是否可以用另一种方式来完成这一点:)这些信息是相关的,所以我把它编辑成了问题。是否可以指示第三方API(例如,通过您的应用程序)在何处查找资源?基本上,我的意思是建议不要把它和应用程序放在一起。是的,但是在一个稳定且可复制的路径中-例如user.home
的子目录中。我只注意到了一个写着“applet”的位置。这实际上是一个小程序吗?这会使事情更加复杂。@AndrewThompson不,它不是小程序。它是一个常规的java应用程序。