如何访问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"));
干杯!!