2012-08-07 13 views
14

Estoy tratando de cargar todos los nombres de las propiedades presentes en el archivo de propiedades con el siguiente código:cómo leer el nombre de propiedad con espacios en java

for(Enumeration<String> en = (Enumeration<String>) prop.propertyNames();en.hasMoreElements();){ 

      String key = (String)en.nextElement(); 

      System.out.println("Property name is "+key); 
     } 

Pero mi archivo de propiedades tiene el siguiente contenido:

username=

password=

Parent file name=

Child file name =

Después de ejecutar el código que estoy recibiendo de salida como:

username password Parent Child

Si el nombre de la propiedad tiene espacios, sólo se está volviendo la primera palabra ..

Puede alguien ¿Por favor dime cómo hacer esto?

+1

Puede leer el archivo usted mismo, desordenado, pero superaría el problema con la forma en que las propiedades traducen cada línea – MadProgrammer

+0

Gracias, estoy tratando de leer el archivo de propiedades usando el lector de archivos y dividir con expresiones regulares. – javanoob

Respuesta

31

Puede escapar de los espacios en su archivo de propiedades, pero creo que comenzará a verse bastante feo.

username=a 
password=b 
Parent\ file\ name=c 
Child\ file\ name=d 

Usted podría ser mejor de escribir su propia aplicación con split() o indexOf() o lo que su corazón desea para evitar cualquier error y/o dolores de cabeza futuros.

+1

el método java.util.Properties.load() tiene algunos separadores incorporados, incluido =, espacio,: Si desea utilizar cualquiera de estos en un nombre de propiedad, debe escapar de él con un \ character. Es desafortunado que los javadocs realmente no mencionen esto, pero la documentación en apache commons-config aunque no sea explícita para este método se aplica (al menos en términos de delimitador de propiedad/valor) http://commons.apache.org/configuration /apidocs/org/apache/commons/configuration/PropertiesConfiguration.html – Matt

+2

Una adición semi aleatoria: al usar archivos de propiedades, tenga mucho cuidado para evitar espacios en blanco involuntarios al final de la propiedad. Aunque se ignora el espacio en blanco que rodea al '=', el espacio en blanco al final no lo es y puede causar errores al tirar del pelo. –

+0

Gracias cklab por su tiempo .. – javanoob

-1

Parece que funciona bien para mí; aquí está mi código:

Properties prop = new Properties(); 
    prop.setProperty("test1", "val1"); 
    prop.setProperty("test number 2", "val number 2"); 
    prop.setProperty("test 3", "val3"); 
    prop.setProperty("test #4", "val #4"); 
    for(Enumeration<String> en = (Enumeration<String>) prop.propertyNames();en.hasMoreElements();){ 
     String key = (String)en.nextElement(); 
     System.out.println("'" + key + "'='" + prop.getProperty(key) + "'"); 
    } 

Y la salida:

'test 3'='val3' 
'test number 2'='val number 2' 
'test1'='val1' 
'test #4'='val #4' 

Puede compararlo con el suyo por lo que la configuración que va, como nuestra muestra parece ser la misma. Si no ve nada, agregue el código completo y echaré un vistazo

+4

Pero no está leyendo las propiedades de un archivo de propiedades que es donde el OP está teniendo problemas. –

5

En Java.util.Properties, '=', ':' o el carácter de espacio en blanco son delimitador de clave/valor cuando se carga desde el archivo de propiedades.

A continuación se presentan Javadoc detallada de su public void load(Reader reader)

La clave contiene todos los caracteres en la línea que comienza con el primer carácter de espacio no blanca y hasta, pero no incluyendo, la primero sin escapar ' = ',': ', o espacio en blanco que no sea un terminador de línea . Todos estos caracteres de terminación clave pueden incluirse en clave escapándolos con un carácter anterior de barra invertida. http://docs.oracle.com/javase/6/docs/api/

0

Así es como lo hago:

public class PropHelper { 
    final static String PROPERTY_FILEPATH = "blah/blah.properties"; 

    static String getPropertyWithSpaces(String property, String delimiter) { 
     try { 
      FileReader reader = new FileReader(PROPERTY_FILEPATH); 
      Properties propertiesObj = new Properties(); 
      propertiesObj.load(reader); 
      return propertiesObj.getProperty(property).replaceAll(delimiter, ""); 
     } catch (Exception ex) { 
      System.out.println("FATAL ERROR: " + ex.getMessage()); 
      System.exit(1); 
     } 

     return null; 
    } 
} 

En algún lugar de . propiedades de archivos:

settings = ` ⚙ Settings ` 

Así es como yo lo llamo:

System.out.println("|" + PropHelper.getPropertyWithSpaces("settings", "`") + "|"); 

Este método funciona con los principales espacios, internos y de salida. ¡Disfrútalo!

Cuestiones relacionadas