我正在为生产监控编写独立的Java应用程序。一旦它开始运行,api就配置为在.properties文件中设置的默认值。在运行状态下,可以更改api的配置,并相应地更新.properties文件。有没有办法实现这个目标?还是有其他方法来实现这个?
提前致谢
答案 0 :(得分:19)
Java Properties类(api here)指定“load”和“store”方法,它们应该完全相同。使用FileInputStream和FileOutputStream指定要将其保存到的文件。
答案 1 :(得分:9)
您可以使用基于java.util.Properties类的非常简单的方法,该方法确实具有load和store方法,您可以将它们与FileInputStream和FileOutputStream结合使用:
但实际上,我建议使用现有的配置库,如Commons Configuration(以及其他)。检查Properties Howto以了解如何使用其API加载,保存和自动重新加载属性文件。
答案 2 :(得分:3)
答案 3 :(得分:3)
我完全同意Apache Commons Configuration API是非常好的选择。
此示例在运行时更新属性
File propertiesFile = new File(getClass().getClassLoader().getResource(fileName).getFile());
PropertiesConfiguration config = new PropertiesConfiguration(propertiesFile);
config.setProperty("hibernate.show_sql", "true");
config.save();
来自帖子how to update properties file in Java
希望这有帮助!
答案 4 :(得分:0)
除了load
类的store
和Properties
方法之外,您还可以使用Apache Commons Configuration库,它提供了轻松操作配置文件的功能(而且不仅仅是.properties文件)。
答案 5 :(得分:0)
Apache通用配置API提供了在运行时重新加载属性文件的不同策略。 FileChangedReloadingStrategy就是其中之一。请参阅此link以查看使用FileChangedReloadingStrategy在运行时重新加载属性文件的示例。
答案 6 :(得分:0)
尝试一下:
//在运行时写入属性文件
public void setValue(String key, String value) {
Properties props = new Properties();
String path = directoryPath+ "/src/test/resources/runTime.properties";
File f = new File(path);
try {
final FileInputStream configStream = new FileInputStream(f);
props.load(configStream);
configStream.close();
props.setProperty(key, value);
final FileOutputStream output = new FileOutputStream(f);
props.store(output, "");
output.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
//读取相同文件
public String getValue(String key) {
String value = null;
try {
Properties prop = new Properties();
File f = new File(directoryPath+"/src/test/resources/runTime.properties");
if (f.exists()) {
prop.load(new FileInputStream(f));
value = prop.getProperty(key);
}
} catch (Exception e) {
System.out.println("Failed to read from runTime.properties");
}
return value;
}