属性文件未使用Apache Commons Configuration反映修改的更改
我正在尝试探索Apache commons配置以动态加载属性文件并在文件中进行修改并保存。
我为此写了一个演示代码。
代码片段
package ABC; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; public class Prop { public static void main(String[] args) { try { URL propertiesURL = Prop.class.getResource("/d1.properties"); if (propertiesURL == null) { System.out.println("null"); } String absolutePath=propertiesURL.getPath(); PropertiesConfiguration pc = new PropertiesConfiguration(absolutePath); pc.setReloadingStrategy(new FileChangedReloadingStrategy()); String s=(String)pc.getProperty("key_account_sales"); System.out.println("s is " + s); pc.setAutoSave(true); pc.setProperty("key_account_sales", "Dummy"); pc.save(); System.out.println("Modified as well"); String sa=(String)pc.getProperty("key_account_sales"); System.out.println("s is " + sa); }catch(ConfigurationException ce) { ce.printStackTrace(); } } }
虽然当我多次运行代码时,正确显示了属性的更新值,但在属性文件中看不到更改。
我尝试刷新整个工作区和项目,但属性文件仍显示上一个条目,而此代码在控制台中显示更新的条目。
为什么我的属性文件没有更新?
好吧,我注意到在我的IDE工作区的bin目录中形成了一个具有相同名称的新文件。 此新文件包含所需的更改。
但是我仍然希望旧文件应该使用新值更新,而不是创建新文件,它应该在旧文件本身中更新。
我的属性文件位于Web应用程序包中
DEM1
以…的名义
Prop1.prop
我想从另一个类中读取这个属性文件
Reading.java
位于另一个包内
DEM2
,在同一属性文件中进行更改并将其显示给另一个用户。 它是部署在应用程序服务器上的Web应用程序。
即使在简单文件(主函数)中使用绝对路径之后,它也不会反映同一文件中的更改,而是在新文件中更新它。
我正在做一个非常轻微的错误,但有人可以帮忙。
使用绝对路径我也无法在普通的main方法中对同一属性文件进行更改。 请建议。
创建bin目录中的新文件,而不是更新src文件夹中的相同文件。
您应该能够使用绝对路径解决此问题。 PropertiesConfiguration
类在类路径的某处找到属性文件,只知道写回"d1.properties"
; 因此,您的bin目录中会出现一个文件。
可以通过查询类路径上的资源来获取绝对路径。 类似于以下内容:
URL propertiesURL = Prop.class.getResource("/d1.properties"); if (propertiesURL == null) { // uh-oh... } String absolutePath = propertiesURL.getPath(); // Now use absolutePath