【问题标题】:Can getResourceAsStream() find files outside the jar file?getResourceAsStream() 可以找到jar文件之外的文件吗?
【发布时间】:2011-12-04 20:25:24
【问题描述】:

我正在开发一个应用程序,它使用一个库来加载配置文件:

InputStream in = getClass().getResourceAsStream(resource);

然后我的应用程序打包在一个.jar 文件中。如果resource.jar 文件中,我可以将路径指定为"/relative/path/to/resource/resource"

我想知道如果资源位于.jar 文件之外,是否可以找到该资源,在这种情况下,我将如何指定路径。

(假设我的应用程序的 jar 在 app/ 中,资源在 app/config 中)。


该程序使用 3rd 方库。 该库将资源用作配置文件。

我还想调整配置文件,而不必一直解压缩/压缩 jar 文件。

【问题讨论】:

  • @AndrewThompson 该库使用资源作为配置文件(它是第三方库)。我还想调整配置文件,而不必一直解压缩/压缩 jar 文件。其实我忘了问我是否可以用另一种方式完成这个:)
  • 该信息是相关的,因此我已将其编辑到问题中。是否可以指示第 3 方 API(例如通过您的应用程序)在哪里查找资源?基本上我的意思是建议不要将它与应用程序一起使用。完全没有,但在一个稳定且可重现的路径中 - 例如user.home的子目录。
  • 我只注意到说“小程序”的位。这真的是一个小程序吗?这让事情变得更加复杂。
  • @AndrewThompson 不,这不是小程序。这是一个普通的 java 应用程序。

标签: java resources jar


【解决方案1】:

一般来说是可以的。从技术上讲,该类的ClassLoader 用于定位参数中命名的资源(see Javadoc here)。如果您没有使用特殊的ClassLoader,那么您将获得引导类加载器,它会搜索类路径。因此,如果您在类路径上有目录或其他 jar 文件,它们将被搜索。

【讨论】:

    【解决方案2】:

    它将获取任何可用于适当类加载器的资源(getClass().getClassLoader() 将返回的资源)。类加载器是否同时包含app 目录 jar 文件取决于您的应用程序上下文的其余部分。

    【讨论】:

      【解决方案3】:

      有一种方法可以获取当前目录 (How to get the path of a running JAR file?),但对于配置,您只需将 -Dconfig.location 传递给 JVM,指定配置的绝对路径

      【讨论】:

        猜你喜欢
        • 2018-03-19
        • 1970-01-01
        • 2023-04-09
        • 2022-11-03
        • 1970-01-01
        • 2011-07-02
        • 2012-12-22
        • 1970-01-01
        • 2014-02-23
        相关资源
        最近更新 更多