属性更新未保存在java属性文件中

时间:2015-03-04 11:58:42

标签: java

我正在尝试更改config.properties文件中的某些值。当我设置它们时,值会发生变化,但它没有被保存。这是我的代码

public class Config {
String filename = "config.properties";

public void displayConfig() throws IOException {

    Properties prop = new Properties();
    InputStream input = null;

    input = getClass().getClassLoader().getResourceAsStream(filename);
    if (input == null) {
        System.out.println("unable to find " + filename);
        return;
    }
    prop.load(input);
    System.out.println();
    System.out.println(prop);
    Enumeration<?> e = prop.propertyNames();
    while (e.hasMoreElements()) {
        String key = (String) e.nextElement();
        String value = prop.getProperty(key);
        System.out.println(key + " : " + value);
    }
    return;
}

public void setConfig() throws Exception {
    File filename = new File("config.properties");
    Properties prop = new Properties();
    FileInputStream in = new FileInputStream(filename);
    prop.load(in);
    in.close();

    FileOutputStream out = new FileOutputStream("config.properties");
    prop.setProperty("db", "csv");
    prop.setProperty("user", "tej");
    prop.setProperty("password", "54321");
    prop.store(out, null);
    out.close();

    System.out.println();
    System.out.println(prop);
}

}

和我调用displayConfig时的输出,setConfig,displayConfig就像

{user=localhost, db=dtcc, password=12345}
db : dtcc
user : localhost
password : 12345

{user=tej, db=csv, password=54321, key=value}

{user=localhost, db=dtcc, password=12345}
db : dtcc
user : localhost
password : 12345

1 个答案:

答案 0 :(得分:3)

嗯,这是非常期待的,因为displayConfig()不会从与setConfig()相同的位置加载其属性。

displayConfig()从类路径根目录下的资源config.properties加载它们,setConfig加载并将它们保存在当前目录的文件中。

顺便说一句;即使当前目录恰好在类路径中,我认为getResourceAsStream()在第一次调用流内容时会缓存它。

选择你的毒药:你想要可读和可写的文件,你应该使用文件IO,或者你想要从类路径加载只读资源,你应该使用getResource[AsStream]。不要混合两者。