2

我在 Eclipse 中的构建路径如下所示:

ProjectName
   -- WEB-INF
      -- classes
         -- myClass.class
      -- configs
         -- myConfig.xml

我当前的配置绝对路径如下所示:

C:\Development\Java\ProjectName\WEB-INF\configs\myConfig.xml

我正在使用 JAXB 进行绑定,它需要一个 FileInputStream。FileInputStream 需要是 XML 配置文件的流。但是,我不知道如何为我的配置获取 FileInputStream,并且我不断收到 FileNotFoundException。

我希望以这样一种方式加载此配置,因为我计划发布项目开源代码,因此无需有人对配置路径进行硬编码。我看到很多例子,有人只是硬编码完整的绝对路径,但我需要它更灵活,“像”这样:

new FileInputStream("/WEB-INF/configs/myConfig.xml");

谢谢!

4

2 回答 2

4

我建议将 myConfig.xml 放在 WEB-INF/classes 目录中,并通过类加载器加载它,因为它位于类路径中。在 servlet 上下文中调用 getResourceAsStream() 将返回一个您可以使用的 InputStream。它与上下文根相关,因此您可以选择该 WAR 并将其放在任何地方 - 您的代码仍然可以工作。

于 2010-02-06T04:12:36.977 回答
4

您可以使用方法(此处ServletContext.getResourceAsStream()为javadoc )及其变体相当容易地获取 WEB-INF 下的相对路径的输入流。

例如,在您的 selvlet 代码中,您可以这样做:

getServletContext().getResourceAsStream("/WEB-INF/configs/myConfig.xml") // your file
getServletContext().getResource("/WEB-INF") // URL to WEB-INF dir
于 2010-02-06T09:12:00.607 回答