我正在使用java EE作为我的动态Web项目。我将sitemap.xml文件放在根路径中。 现在我需要一个路径来修改该文件。我试试:
String path = getClass().getClassLoader().getResource(".").getPath() +"\\sitemap.xml";
但The system cannot find the file specified
。
我正在使用窗口,当我将项目上传到linux主机时,我需要更改什么?
答案 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。