如何访问java类中WEB-INF文件夹下的文件

时间:2012-10-14 15:51:35

标签: java java-ee

我在Web应用程序中有一个普通的java类,想要读取WEB-INF文件夹下的配置文件。我知道在类路径(WEB-INF/classes文件夹中)访问该文件的方法。由于WEB-INF/classes文件夹适用于.class文件,因此我希望将配置文件保留在WEB-INF文件夹下。

有谁能告诉我如何从我的java类访问它?

4 个答案:

答案 0 :(得分:16)

ServletContext.getResourceAsStream()将从相对于WAR文件根目录的给定路径加载文件。类似的东西:

ServletContext ctx;
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties");

这里的主要问题是您需要访问servlet上下文才能执行此操作。您可以在servlet或过滤器中使用它,但不能在应用程序中的非Web组件中使用它。您有几个选择:

  • 通过应用程序范围的变量或注入或其他方式使servlet上下文从Web层可用到服务层
  • 将资源加载代码放入Web层,并将其公开给服务层
  • 在Web图层中加载配置,并将其传递到服务层

答案 1 :(得分:2)

您可以使用getRealPath()的{​​{1}}方法获取servlet的绝对路径,然后将ServletContext附加到您获得的路径。我认为这是非常基本的,也可能有其他一些答案。

答案 2 :(得分:1)

“new FIleInputStream(       Utility.class.getClassLoader()的getResource(的KeyFileName).getPath() )” 为我工作。

这里“Utility”是我的类名,代码在这里调用此行,“keyFileName”是我需要打开的文件

答案 3 :(得分:0)

hey you all care for context related file loading like application context , web.xml ,config and property file

以下是如何在WEB-INF下加载任何类型文件的java文件,但它再次存储在子文件夹reportFile等另一个结构文件或子文件夹report01 -

fullpath is = /WEB-INF/reportFile/report01/report.xml,我已经尝试了很多可能来加载和读取这个xml文件...上面没有一个对我有用,但是,这是将来使用的技巧......

In Action or inservice class you know interface implementation class没有imports也很好。

声明您的文件对象

File myClass = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
System.out.println("Finding calss path first then remove classes from the path "    + myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFIle/report01/reports.xml")

2.通过从上面删除classes并添加您的特定路径

来加载路径
File f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")

之后

你甚至可以使用xml解析器解析它或做任何事情

document = docBuilder.parse(new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml"));

干杯!!