Как избежать двоеточия (:) в файле свойств?

Я использую файл свойств для хранения значений конфигурации моего приложения. В одном из случаев я должен сохранить значение как xxx:yyy:zzz, Когда я делаю это, толстой кишке удается избежать обратной косой черты\ в результате чего значение отображается какxxx\:yyy\:zzz в файле свойств.

Я знаю, что толстая кишка: является стандартным разделителемProperties Класс Java Однако мне все еще нужно сохранить значение без обратной косой черты\.

Любые предложения о том, как справиться с этим?

Ответы на вопрос(5)

Это просто, просто используйтеApostrophe ' ' там Например.:

Вместо этого (случай 1)

File file= new File("f:\\properties\\gog\\esave\\apple");
prop.setProperty("basedir",flie.toString());

Use this(case 2)

File file= new File("f':'\\properties\\gog\\esave\\apple");
prop.setProperty("basedir",flie.toString());

Выход будет


Случай 1: basedir = f: \ properties \ gog \ esave \ apple

Случай 2: basedir = f: \ properties \ gog \ esave \ apple

Я надеюсь, что это поможет вам

Мы задали этот вопрос пару дней назад. Мы манипулировали существующими файлами свойств с URL-адресами в качестве значений.

Это рискованно, но если значения вашего свойства меньше 40 символов, вы можете использовать «список». метод вместо "хранить":

http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#list(java.io.PrintWriter)

Мы быстро взглянули на код JDK и взломали собственную реализацию магазина, которая работает для наших целей:

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));
    }
    pw.close();
}

Я столкнулся с той же проблемой. Косая черта/ также ускользнуть отstore() метод вProperties.

Я решил эту проблему, создав свой собственныйCustomProperties класс (расширениеjava.util.Properties) и комментируя призыв кsaveConvert() вcustomStore0() метод.

Вот мойCustomProperties учебный класс:

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();
  }
}
Решение Вопроса

Поместите свойства вProperties объект и сохранить его с помощьюstore(...) метод. Метод выполнит любое необходимое экранирование.Документация Java говорит:

"... 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."

Вам нужно вручную экранировать символы, если вы создаете / пишете файл вручную.


И наоборот, если вы хотите, чтобы файл содержал неэкранированные символы двоеточия, вам не повезло. Такой файл искажен и, вероятно, не будет загружен должным образом, используяProperties.load(...) методы. Если вы пойдете по этому пути, вам потребуется реализовать свои собственные методы загрузки и / или хранения.

Если вы используете вариант XML-файла свойств (используяloadFromXML а такжеstoreToXML) это не должно быть проблемой.

Ваш ответ на вопрос