使用ClassLoader方法将类下的所有资源检索为输入流

我的问题是你认为很常见的问题,但我还没有设法找到解决方案。

在Tomcat 5.5下构建Java Web应用程序(虽然要求它可以在任何地方部署,例如在WebLogic环境下,因此将资源作为流要求加载)。 好的做法要求资源文件放在WEB-INF / classes下,并使用ClassLoader的getResourceAsStream()方法加载。 当您知道要加载的资源的名称时,一切顺利。

我的问题是我需要加载存在于子目录中的所有内容(包括递归在非空子目录中)。

因此,例如,如果我在WEB-INF / classes下有以下内容:

folderX / folderY

folderX / folderY / fileA.properties

folderX / fileB.properties

我需要加载fileA.properties和fileB.properties类,而不是在应用程序启动之前实际知道它们的名称(即我需要能够从WEB-INF / classes下的任何目录中任意加载资源)。

这样做最优雅的方法是什么? 我可以通过什么对象查询我需要的信息(每个所需资源的资源路径)? 非servlet特定的解决方案是最好的(如果可能的话,将它全部保存在类加载框架中)。

提前致谢!

你可以用一些技巧:)

获取资源作为URL,提取协议:

  • 文件协议 – 获取URL路径,您有一个文件夹,扫描文件。
  • jar / zip协议 – 提取jar / zip路径并使用JarFile浏览文件并提取路径/包下的所有内容。

据我所知,没有这样的能力,因为类加载器只尝试加载它所要求的东西。 它不预先获取类路径上的所有项目,也不会将它们视为目录结构。

我解决问题的方法是在构建时在所有相关资源的文本文件中创建一个目录列表,并将其包含在战争中,然后通过这种方式进行处理。