如何在java EE中获取Web项目的根路径

时间:2013-11-29 10:56:51

标签: java path

我正在使用java EE作为我的动态Web项目。我将sitemap.xml文件放在根路径中。 现在我需要一个路径来修改该文件。我试试:

String path = getClass().getClassLoader().getResource(".").getPath() +"\\sitemap.xml";

The system cannot find the file specified。 我正在使用窗口,当我将项目上传到linux主机时,我需要更改什么?

2 个答案:

答案 0 :(得分:2)

ClassLoader#getResource()仅查找类路径资源,而不是Web资源。 sitemap.xml显然是一种网络资源。您应该使用ServletContext#getResource()或其JSF对应ExternalContext#getResource() - 正如您的问题历史所示,您正在使用JSF。

URL url = externalContext.getResource("/sitemap.xml");

或者,仅供阅读:

InputStream input = externalContext.getResourceAsStream("/sitemap.xml");

通常,您不应该对所使用的实际磁盘文件系统路径感兴趣。这通常是临时文件夹位置,甚至是内存位置。


无关的具体问题,写给它是一个完整的故事。无法从Java EE应用程序内部写入类路径资源和Web资源。即使它是可能的(即它不是内存资源),每当您重新部署WAR或甚至刚刚重新启动服务器时,所有更改都将完全丢失,原因很简单,这些更改未反映在原始服务器中WAR文件。鉴于“sitemap.xml”的特定文件名,我的印象是你想要一个更永久的存储。在这种情况下,我强烈建议寻找不同的解决方案。例如。将文件存储在WAR外部的固定路径中,或仅存储在数据库中的数据结构中。

答案 1 :(得分:1)

首先,尽量不要使用Windows文件分隔符“\”,因为它依赖于平台。 相反,您可以使用“/”(据我记得,它应该由JVM替换为合适的分隔符),或者更好的是File.separator