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