我的类路径中有一个属性文件。我的要求是根据从参数中获得的一些输入来更改此文件中的某些属性。参数的性质决定了我是否需要更改属性以及是否需要更改哪些属性。问题是所有类路径条目都是在应用程序启动时加载的,因此从我的应用程序中进行更改不会产生任何影响。我该如何克服这个问题?
我能想到的一个可能的解决方案是不在类路径中添加此属性文件,而是在完成修改后添加。它可行吗?什么是一个好的解决方案?
答案 0 :(得分:1)
此文件是否在您的类路径上并不重要。它是一个文件:如果你覆盖它的内容,它将会改变。没有一些在启动时神奇地获得的内存中副本。这与加载的类非常不同,可能需要在运行时更改。
符合正确格式的属性文件可以读入java.util.Properties对象。您可以这样做,使用该对象根据需要更改属性,然后将其写回文件。检查该班级中的store
和load
方法。请注意,如果您使用的版本为Output/InputStream
,则编码是硬编码的。如果文件的编码不是ISO-8859-1,请使用具有适当Writer/Reader
的方法。
答案 1 :(得分:1)
取决于您的应用程序的部署方式。如果您的属性文件位于jar中,则无法直接更改该属性文件,因为它已打包并在存档中压缩。您可以在其他人提及的情况下将这些属性加载到对象中,然后存储/写出到外部位置,可能是基于URL的位置。 URL非常方便,因为它可以让您访问几乎任何位置,并且它具有用于加载属性的漂亮的openStream()方法。然后,您的应用程序可以在加载时查找新文件,如果无法从新位置读取/加载,则默认为应用程序启动版本。
答案 2 :(得分:0)
以下是示例代码:
Properties p = new Properties();
File f = new File("file");
InputStream in = new FileInputStream(f);
p.load(in);
p.put("key", "blah");
OutputStream out = new FileOutputStream(f);
// If no comments p.store(writer);
p.store(out, "properties");
答案 3 :(得分:0)
您需要先从属性文件中删除该属性,然后重新定义它。他们无法直接修改属性文件。
以下是一个例子:
Properties pproperties = new Properties();
if (properties.containsKey("key1")) {
properties.remove("key1");
properties.setProperty("key1", "value1");
properties.store(new FileOutputStream("file.properties"), null);
}