我在Web应用程序中有一个普通的java类,想要读取WEB-INF
文件夹下的配置文件。我知道在类路径(WEB-INF/classes
文件夹中)访问该文件的方法。由于WEB-INF/classes
文件夹适用于.class
文件,因此我希望将配置文件保留在WEB-INF
文件夹下。
有谁能告诉我如何从我的java类访问它?
答案 0 :(得分:16)
ServletContext.getResourceAsStream()将从相对于WAR文件根目录的给定路径加载文件。类似的东西:
ServletContext ctx;
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties");
这里的主要问题是您需要访问servlet上下文才能执行此操作。您可以在servlet或过滤器中使用它,但不能在应用程序中的非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")
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"));
干杯!!