我能够获取一个InputStream到我的WEB-INF文件夹中的资源,如下所示:
ExternalContext externalContext = facesContext.getExternalContext();
InputStream in = externalContext.getResourceAsStream("/WEB-INF/config.xml");
现在我想在运行时编辑此文件,但我不知道如何覆盖该文件。 有没有比创建绝对路径的FileOutputStream更好的方法?即使不是,我仍然需要一种方法来获取文件的绝对路径(WEB-INF文件夹的绝对路径)。
答案 0 :(得分:2)
关于具体问题,您可以按如下方式获取文件的绝对路径:
ExternalContext externalContext = facesContext.getExternalContext();
String realPath = externalContext.getRealPath("/WEB-INF/config.xml");
FileOutputStream output = new FileOutputStream(realPath);
// ...
至于具体的功能要求,有两个可能的主要问题:
getRealPath()
将返回null
。那时没有物理磁盘文件系统路径的方法。没有办法获得内存中位置的“文件路径”。
即使它返回了一个有效的路径,每当你重新部署WAR时,在本地磁盘文件系统上扩展的WAR结构中所做的所有更改都会丢失,甚至在你重新启动服务器的某些服务器配置中也会丢失。原因很简单,原始WAR文件中不包含这些更改。您基本上需要提取WAR,在那里进行更改,再次打包WAR并触发服务器的重新部署。这在运行时没有任何意义。
换句话说,您正在寻找错误方向的解决方案。您需要准备一个固定的本地磁盘文件系统路径,并从/向它读/写。另一种方法是使用SQL数据库,也可以使用java.util.prefs.preferences
。