2011-10-10 99 views
7

我开发使用加载配置文件作为一个库的应用程序:可以getResourceAsStream()查找jar文件之外的文件吗?

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

我在填充于.jar文件的应用程序。如果resource位于.jar文件中,我可以指定路径为"/relative/path/to/resource/resource"

我想知道是否有可能找到资源,如果它不在.jar文件,在这种情况下,我将如何指定路径。

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


该方案采用了一块3 党库。 该库使用该资源作为配置文件。

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

+0

@AndrewThompson库的绝对路径使用资源的配置文件(这是一个第三方图书馆)。我也想调整配置文件,而不必一直解压/压缩jar文件。其实我忘了问我是否可以以另一种方式完成这项工作:) – kunigami

+0

这些信息是相关的,所以我将它编辑成了问题。第三方API是否可以指示(例如,通过您的应用程序)在哪里查找资源?基本上我导致的是建议不要将它与应用程序。完全可以,但是在一个稳定和可重复的路径中 - 比如'user.home'的子目录。 –

+0

我只注意到那个说'小程序'的位。这实际上是一个小程序吗?这使事情进一步复杂化。 –

回答

8

一般来说,它可以。从技术上讲,该类的ClassLoader用于查找参数中指定的资源(see Javadoc here)。如果你没有使用特殊的ClassLoader,那么你会得到bootstrap类加载器,它将搜索类路径。所以,如果你在类路径上有目录或其他jar文件,它们将被搜索。

1

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