I am using a properties file to store my application's configuration values. In one of the instances, I have to store a value as xxx:yyy:zzz. When I do that, the colon is escaped with a back slash\ resulting in the value showing as xxx\:yyy\:zzz in the properties file.
I am aware that the colon : is a standard delimiter of the Properties Java class. However I still need to save the value without the back slash \.
Any suggestions on how to handle this?
In my case, two leading '\\' working fine for me.
would be the two-character key ":=". Line terminator characters can be included using \r and \n escape sequences. Any white space after the key is skipped; if the first non-white space character after the key is '=' or ':' , then it is ignored and any white space characters after it are also skipped.
Properties properties = new Properties(); properties. load(reader); Then you can use the remove() method.
Put the properties into the Properties object and save it using a store(...) method. The method will perform any escaping required. The Java documentation says:
"... For the key, all space characters are written with a preceding \ character. For the element, leading space characters, but not embedded or trailing space characters, are written with a preceding \ character. The key and element characters #, !, =, and : are written with a preceding backslash to ensure that they are properly loaded."
You only need to manually escape characters if you are creating / writing the file by hand.
Conversely, if you want the file to contain unescaped colon characters, you are out of luck. Such a file is malformed and probably won't load properly using the Properties.load(...) methods. If you go down this route, you'll need to implement your own custom load and/or store methods.
I came across the same issue. Forward slashes / also get escaped by the store() method in Properties.
I solved this issue by creating my own CustomProperties class (extending java.util.Properties) and commenting out the call to saveConvert() in the customStore0() method.
Here is my CustomProperties class:
import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.Date; import java.util.Enumeration; import java.util.Properties; public class CustomProperties extends Properties { private static final long serialVersionUID = 1L; @Override public void store(OutputStream out, String comments) throws IOException { customStore0(new BufferedWriter(new OutputStreamWriter(out, "8859_1")), comments, true); } //Override to stop '/' or ':' chars from being replaced by not called //saveConvert(key, true, escUnicode) private void customStore0(BufferedWriter bw, String comments, boolean escUnicode) throws IOException { bw.write("#" + new Date().toString()); bw.newLine(); synchronized (this) { for (Enumeration e = keys(); e.hasMoreElements();) { String key = (String) e.nextElement(); String val = (String) get(key); // Commented out to stop '/' or ':' chars being replaced //key = saveConvert(key, true, escUnicode); //val = saveConvert(val, false, escUnicode); bw.write(key + "=" + val); bw.newLine(); } } bw.flush(); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With