Is there any way to change a properties file that is in my classpath?

纵饮孤独 提交于 2020-01-07 02:18:41

问题


I have a properties file that is in my classpath. My requirement is to change some properties in this file based on some inputs I get from arguments. The nature of arguments decide whether I need to change the properties and if yes which properties to change. The problem is that all classpath entries are loaded at the application startup time, so changing from within my application would not have any effect. How do I overcome this problem?

One possible solution I can think of is to not add this properties file in classpath but add after modifications are done. Is it viable? What can be a good solution?


回答1:


It doesn't matter whether this file is on your classpath or not. It is a file: if you overwrite its contents, it will have changed. There isn't some in-memory copy that magically gets made at startup. This is very different from classes that are loaded in and which might need change at runtime.

Properties files that adhere to the right format can be read into a java.util.Properties object. You could do that, use the object to alter the properties as needed, then write it back out to the file. Check the store and load methods in that class. Mind that if you use the versions that take an Output/InputStream, the encoding is hard-coded. If the file's encoding is anything else than ISO-8859-1, use a method with an appropriate Writer/Reader.




回答2:


Depends on how your application is deployed. If your properties files is inside a jar, you won't be able to directly change that properties file since its packaged and zipped up in an archive. You can instead as someone else mentioned load those properties into an object, and then store/write out to an external location, probably a URL based location. URL is convenient because it gets you access to virtually any location and it has that nifty openStream() method for loading properties. Your application could then look for the new file on load, and default to the application startup version if it fails to read/load from the new location.




回答3:


Here is a sample code:

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



回答4:


You need to first remove that property from the property file and then re-define it. Their is no way to directly modify the properties file.

Below is an example:

   Properties pproperties = new Properties();

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

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


来源:https://stackoverflow.com/questions/7804303/is-there-any-way-to-change-a-properties-file-that-is-in-my-classpath

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!