我正在尝试探索 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 应用程序包内
演示1
以
道具1.prop
我想从另一个类中读取这个属性文件说
阅读.java
位于另一个包内
DEM2
,在同一个属性文件中进行更改并将其显示给另一个用户。它是部署在应用程序服务器上的 Web 应用程序。
即使在简单文件(主函数)中使用绝对路径后,它也不会反映同一文件中的更改,而是在新文件中更新它。
我犯了一个非常轻微的错误,但有人可以帮忙。
使用绝对路径我也无法在普通主方法中对同一属性文件进行更改。请建议。
创建 bin 目录中的新文件,而不是更新 src 文件夹中的相同文件。