2010-02-01 7 views
6

Quiero tener varias claves (> 1) para un solo valor en un archivo de propiedades en mi aplicación Java. Una forma simple de hacerlo es definir cada clave en una línea separada en el archivo de propiedades y el mismo valor para todas estas claves. Este enfoque aumenta la capacidad de mantenimiento del archivo de propiedades. La otra manera (que creo que podría ser una manera inteligente) es definir claves separadas por comas con el valor en una sola línea. p.ej.Propiedades en Java: ¿podemos tener claves separadas por comas con un valor único?

key1,key2,key3=value 

Java.util.properties no es compatible con esta opción. ¿Alguien hizo algo similar antes? Hice google pero no encontré nada.

--manish

Respuesta

2

Desde java.util.Properties extiende java.util.Hashtable, podría utilizar Properties para cargar los datos, a continuación, después del proceso de los datos.

La ventaja de utilizar java.util.Properties para cargar los datos en vez de rodar su propio es que la sintaxis de las propiedades es en realidad fairly robust, ya apoyar muchas de las características útiles que puede llegar a tener que volver a poner en práctica (por ejemplo, los valores de división a través múltiples líneas, escapes, etc.).

4

Una de las cosas buenas de los archivos de propiedades es que son simples. Sin sintaxis compleja para aprender, y son fáciles de entender.

¿Desea saber cuál es el valor de la propiedad foo? Escanee rápidamente la columna izquierda hasta que vea "foo".

Personalmente, me parecería confuso si veo un archivo de propiedades como ese.

Si eso es lo que realmente desea, debería ser fácil de implementar. Una primera puñalada rápida podría tener este aspecto:

  • Abrir el archivo
  • Para cada línea:
    • trim() espacios en blanco
    • Si la línea está vacía o se inicia con un #, pasar
    • Dividir en "=" (con el límite establecido en 2), dejándole con la clave y el valor
    • Tecla dividir en ","
    • Para cada clave, trim() y agregarlo al mapa, junto con el trim() 'd valor

Eso es todo.

+0

+1 para el asesoramiento "mantenerlo simple". Pero recomienda la implementación no es tan simple (puede usar Propiedades y posprocesarla) – helios

+0

No olvide que el archivo de Propiedades sigue el siguiente principio: Clave = Valor o Valor = Clave o ambas (es decir, clave = clave o valor = valor) . El signo "=" separa los 2 campos. Apache Struts usa esta característica de manera extensiva cuando introdujeron LookupDispatchAction.Solo pensé en agregar mi valor de 2cent :-) –

+0

@Gentleman: Tal vez Struts tiene alguna subclase de propiedades especial, pero las 'propiedades' Java 'normales son solo clave = valor. –

5

No estoy al tanto de una solución existente, pero debe ser muy sencillo de implementar:

String key = "key1,key2,key3", val = "value"; 
Map<String, String> map = new HashMap<String, String>(); 
for(String k : key.split(",")) map.put(k, val); 
System.out.println(map); 
Cuestiones relacionadas