java更新属性文件运行时

时间:2009-11-02 06:03:18

标签: java

我正在为生产监控编写独立的Java应用程序。一旦它开始运行,api就配置为在.properties文件中设置的默认值。在运行状态下,可以更改api的配置,并相应地更新.properties文件。有没有办法实现这个目标?还是有其他方法来实现这个?

提前致谢

7 个答案:

答案 0 :(得分:19)

Java Properties类(api here)指定“load”和“store”方法,它们应该完全相同。使用FileInputStream和FileOutputStream指定要将其保存到的文件。

答案 1 :(得分:9)

您可以使用基于java.util.Properties类的非常简单的方法,该方法确实具有loadstore方法,您可以将它们与FileInputStream和FileOutputStream结合使用:

但实际上,我建议使用现有的配置库,如Commons Configuration(以及其他)。检查Properties Howto以了解如何使用其API加载,保存和自动重新加载属性文件。

答案 2 :(得分:3)

根据我所知,java.util.Properties不提供开箱即用的运行时重新加载。 Commons Configuration支持在运行时重新加载配置。可以通过setting a ReloadingStrategy on the PropertiesConfiguration object配置重新加载策略。它还提供了各种其他有用的实用程序,可以使您的应用程序可配置。

答案 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类的storeProperties方法之外,您还可以使用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;
    }