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

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

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

ServletContext.getResourceAsStream()将从相对于WAR文件根目录的给定路径加载文件。 就像是:

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

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

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

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

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

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

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")); 

干杯!!