2011-10-18 51 views
0

我有一个属于我的类路径的属性文件。我的要求是根据我从参数中得到的一些输入来改变这个文件中的一些属性。参数的性质决定我是否需要更改属性,如果是,哪些属性会更改。问题是所有的类路径条目都是在应用程序启动时加载的,所以从我的应用程序中改变不会有任何影响。我如何克服这个问题?有没有办法更改我的类路径中的属性文件?

我能想到的一个可能的解决方案是不在类路径中添加此属性文件,但在修改完成后添加。它可行吗?什么可以是一个好的解决方案?

回答

1

这个文件是否在你的类路径上并不重要。它是一个文件:如果你覆盖它的内容,它会改变。没有一些内存中的内容可以在启动时神奇地获得。这与非常不同,它们被加载并且可能在运行时需要更改。

坚持正确格式的属性文件可以读入java.util.Properties对象。你可以这样做,使用该对象根据需要更改属性,然后将其写回到文件中。检查该类中的storeload方法。请注意,如果您使用采用Output/InputStream的版本,则编码是硬编码的。如果文件的编码不是ISO-8859-1,则使用适当的方法Writer/Reader

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"); 
0

您需要首先从属性文件中删除该属性,然后重新定义它。他们无法直接修改属性文件。

下面是一个例子:

Properties pproperties = new Properties(); 

    if (properties.containsKey("key1")) { 

         properties.remove("key1"); 
         properties.setProperty("key1", "value1"); 
         properties.store(new FileOutputStream("file.properties"), null); 
        } 
1

取决于应用程序的部署。如果您的属性文件位于jar文件中,那么您将无法直接更改该属性文件,因为它已打包并压缩到归档文件中。您可以像其他人提到的那样将这些属性加载到对象中,然后将其存储/写出到外部位置,可能是基于URL的位置。 URL很方便,因为它可以访问几乎任何位置,并且它具有用于加载属性的漂亮的openStream()方法。然后,您的应用程序可以在加载时查找新文件,如果无法从新位置读取/加载,则默认为应用程序启动版本。

+0

是的,我的工具将被包装在一个罐子里。所以我试图将文件复制到另一个位置(最好是温度),然后在那里进行更改 –

相关问题