我正在尝试探索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();
}
}
}
虽然当我多次运行代码时,正确显示了属性的更新值,但在属性文件中看不到更改。
我尝试刷新整个工作区和项目,但属性文件仍显示上一个条目,而此代码在控制台中显示更新的条目。
为什么我的属性文件没有更新?
我注意到在bin中形成了一个同名的新文件 我的IDE工作区的目录。此新文件包含必需的 变化。
但是我仍然希望旧文件应该使用new更新 值而不是创建一个新文件,它应该在旧的更新 归档。
我的属性文件位于Web应用程序包中,如
DEM1
以
为名Prop1.prop
我想从另一个类中读取此属性文件
Reading.java
位于另一个包
内DEM2
,在同一属性文件中进行更改并将其显示给其他用户。它是部署在应用程序服务器上的Web应用程序。
即使在简单文件(主要功能)中使用绝对路径,它也不会反映同一文件中的更改,而是在新文件中更新。
我正在做一个非常小的错误,但有人可以帮忙。
使用绝对路径我也无法在普通的main方法中对同一属性文件进行更改。请建议。
创建bin目录中的新文件,而不是更新同一文件 在src文件夹中。
答案 0 :(得分:0)
您应该能够使用绝对路径解决此问题。 PropertiesConfiguration
类在类路径的某处找到属性文件,只知道写回"d1.properties"
;因此,您的bin目录中会出现一个文件。
可以通过查询类路径上的资源来获取绝对路径。如下所示:
URL propertiesURL = Prop.class.getResource("/d1.properties");
if (propertiesURL == null) {
// uh-oh...
}
String absolutePath = propertiesURL.getPath();
// Now use absolutePath