2015-08-31 2 views
0

Я использовал класс свойств для хранения карты в файл. Но некоторые символы - это хранилища с добавлением «\» в начале.Свойства Класс и символы Escape

Есть ли способ распечатать фактический контент, как есть, без этих экранов с помощью класса свойств.

Я пишу, используя класс свойств, но читаю с использованием BufferedReader. Я не мог понять, какие символы экранированы при написании с использованием класса свойств.

Есть ли способ читать данные без этих экранов с помощью BufferedReader?

Для например:

Если фактическое содержание abc:def:ghi Когда я присвоить это значение свойство, называемое имя и сохранить его в файл, используя свойства класса, он сохраняется как:

name=abc\:def\:ghi. 

Теперь, когда я прочитал это с помощью BufferedReader, я получаю все символы \ в содержании.

Проблема в том, что я не знаю, что все символы хранятся с добавленным символом \.

+1

Можете ли вы опубликовать рабочий пример, демонстрирующий проблему? Кроме того, почему вы не можете использовать «Свойства» для чтения? – BackSlash

+0

@BackSlash: Обновлен вопрос – sujith

+0

Вы опубликовали данные; не рабочий пример. Проблема может быть вызвана различными причинами; поэтому очень важно, чтобы вы предоставили ** код **. Кроме того: обычно ... когда вы можете воспроизвести проблему с помощью нескольких строк автономного кода; вы почти решаете проблему. Итак: попытайтесь понять, что делает ваш код; и попытайтесь сделать это без «беспорядка» вокруг. – GhostCat

ответ

1

Все специальные символы экранированы java.util.Properties. Вы не можете это предоставить.

Это будет сделано в saveConvert:

/* 
    * Converts unicodes to encoded \uxxxx and escapes 
    * special characters with a preceding slash 
    */ 
    private String saveConvert(String theString, 
           boolean escapeSpace, 
           boolean escapeUnicode) { 
     int len = theString.length(); 
     int bufLen = len * 2; 
     if (bufLen < 0) { 
      bufLen = Integer.MAX_VALUE; 
     } 
     StringBuffer outBuffer = new StringBuffer(bufLen); 

     for(int x=0; x<len; x++) { 
      char aChar = theString.charAt(x); 
      // Handle common case first, selecting largest block that 
      // avoids the specials below 
      if ((aChar > 61) && (aChar < 127)) { 
       if (aChar == '\\') { 
        outBuffer.append('\\'); outBuffer.append('\\'); 
        continue; 
       } 
       outBuffer.append(aChar); 
       continue; 
      } 
      switch(aChar) { 
       case ' ': 
        if (x == 0 || escapeSpace) 
         outBuffer.append('\\'); 
        outBuffer.append(' '); 
        break; 
       case '\t':outBuffer.append('\\'); outBuffer.append('t'); 
          break; 
       case '\n':outBuffer.append('\\'); outBuffer.append('n'); 
          break; 
       case '\r':outBuffer.append('\\'); outBuffer.append('r'); 
          break; 
       case '\f':outBuffer.append('\\'); outBuffer.append('f'); 
          break; 
       case '=': // Fall through 
       case ':': // Fall through 
       case '#': // Fall through 
       case '!': 
        outBuffer.append('\\'); outBuffer.append(aChar); 
        break; 
       default: 
        if (((aChar < 0x0020) || (aChar > 0x007e)) & escapeUnicode) { 
         outBuffer.append('\\'); 
         outBuffer.append('u'); 
         outBuffer.append(toHex((aChar >> 12) & 0xF)); 
         outBuffer.append(toHex((aChar >> 8) & 0xF)); 
         outBuffer.append(toHex((aChar >> 4) & 0xF)); 
         outBuffer.append(toHex(aChar  & 0xF)); 
        } else { 
         outBuffer.append(aChar); 
        } 
      } 
     } 
     return outBuffer.toString(); 
    } 
+0

Зачем искать исходный код, когда есть [спецификация] (http://docs.oracle.com/javase/8/docs/api/java/util/Properties.html#store-java.io.Writer- java.lang.String-) объясняя, что будет сделано, независимо от того, как это реализовано ... – Holger

Смежные вопросы