我正在尝试更改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
答案 0 :(得分:3)
嗯,这是非常期待的,因为displayConfig()
不会从与setConfig()
相同的位置加载其属性。
displayConfig()
从类路径根目录下的资源config.properties加载它们,setConfig加载并将它们保存在当前目录的文件中。
顺便说一句;即使当前目录恰好在类路径中,我认为getResourceAsStream()
在第一次调用流内容时会缓存它。
选择你的毒药:你想要可读和可写的文件,你应该使用文件IO,或者你想要从类路径加载只读资源,你应该使用getResource[AsStream]
。不要混合两者。