要读取properties
与Glassfishv3 Web服务器,它位于JSF2.0文件root directory
我的web应用程序中,我使用下面的代码-
ServletContext ctx = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
String deploymentDirectoryPath = ctx.getRealPath("/");
Properties prop = new Properties();
prop.load(new FileInputStream(deploymentDirectoryPath
+ File.separator + "portal-config.properties"));
下面是网站的截图portal-
虽然运行门户我得到FileNotFound错误,因为文件中不存在的GlassFish域。
有什么办法读取属性文件,同时可在该情况下工作,在发展阶段和在战争文件还?
你永远不应该使用java.io.File
指网络资源。 因此它不知道它是坐在情况下,你也永远不应该使用ServletContext#getRealPath()
因为它可能会返回null
时,服务器被配置扩展内存,而不是磁盘上的WAR文件,这是超出第三方控件主机。
只要使用ExternalContext#getResourceAsStream()
来直接访问网络资源在味道InputStream
。 这需要相对于所述web内容根目录的路径。
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
properties.load(ec.getResourceAsStream("/portal-config.properties"));
也可以看看:
- 的getResourceAsStream()VS的FileInputStream
- 什么的ServletContext.getRealPath(“/”)的意思是,我应该使用它时,
- 在哪里放置以及如何在基于servlet的应用程序读取配置资源文件?
更新似乎并没有被Web资源都没有。 您应该将文件移入“的WebContent”文件夹截图所示。 或者,更好的/WEB-INF
文件夹,以便没有人可以通过URL访问它。
properties.load(ec.getResourceAsStream("/WEB-INF/portal-config.properties"));
另一种方法是把它在classpath中,如截图所示的“Java源”文件夹中。 你不需要把它放在一个包,这是可选的。 假设你没有把它放在一个包,那么这样做:
ClassLoader cl = Thread.currentThread().getContextClassLoader();
properties.load(cl.getResourceAsStream("portal-config.properties"));
(注意,路径可能不是以斜线开始!)