How do you escape colon (:) in Properties file?

不打扰是莪最后的温柔 提交于 2019-12-28 03:05:41


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?


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.util.Date;
import java.util.Enumeration;
import java.util.Properties;

public class CustomProperties extends Properties {
  private static final long serialVersionUID = 1L;
  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());
      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);


We hit this question a couple of days ago. We were manipulating existing properties files with URLs as values.

It's risky but if your property values are less than 40 characters then you can use the "list" method instead of "store":

We had a quick look at the JDK code and hacked out a custom implementation of store that works for our purposes:

public void store(Properties props, String propertyFilePath) throws FileNotFoundException {
    PrintWriter pw = new PrintWriter(propertyFilePath); 
    for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
        String key = (String) e.nextElement();
        pw.println(key + "=" + props.getProperty(key));


If you use the xml variant of the properties file (using loadFromXML and storeToXML) this shouldn't be a problem.


Its simple, just use Apostrophe ' ' over there E.g.:

Instead of this(case 1)

File file= new File("f:\\properties\\gog\\esave\\apple");

Use this(case 2)

File file= new File("f':'\\properties\\gog\\esave\\apple");

Output will be

Case 1: basedir = f:\properties\gog\esave\apple

Case 2: basedir = f:\properties\gog\esave\apple

I hope this will help you


Try using unicode.

The unicode for a colon is\u003A

Additionally the unicode for a space is: \u0020

For a list of basic Latin characters see:

For example:

ProperName\u003A\NameContinues=Some property value

Will expect a property with a key:


And will have a value of:

Some property value