2009-09-04 25 views
20

Soy un novato en lo que respecta a las propiedades, y he leído que XML es la forma preferida de almacenarlas. Me di cuenta sin embargo, que al escribir el archivo .properties un regulares en el estilo dePropiedades de Java: archivos .properties vs xml?

foo=bar 
fu=baz 

también funciona. Esto significaría mucho menos tipeo (y tal vez más fácil de leer y más eficiente también). ¿Cuáles son los beneficios de usar un archivo XML?

Respuesta

19

En XML puede almacenar más complejos (p. ej. datos jerárquicos) que en un archivo de propiedades. Entonces depende de tu uso. Si solo desea almacenar un pequeño número de propiedades directas, un archivo de propiedades es más fácil de manejar (aunque la clase de propiedades de Java también puede leer propiedades basadas en XML).

Tendría sentido mantener su interfaz de configuración lo más genérica posible de todos modos, por lo que no tiene problema para cambiar a otra representación (por ejemplo, usando Apache Commons Configuration) si es necesario.

+0

FYI: la clase java.util.Properties admite XML: http://java.sun.com/javase/6/docs/api/java/util/Properties.html#loadFromXML(java.io.InputStream) http://java.sun.com/javase/6/docs/api/java/util/Properties.html#storeToXML(java.io.OutputStream,%20java.lang.String) – Asaph

+0

Editar: las direcciones URL anteriores están destrozadas el paréntesis de cierre debe ser parte de los enlaces. – Asaph

+1

por favor revise/agregue la respuesta de Mike Sickler antes de llegar a una conclusión. Ciertamente no quiere perder su punto. – Gerrard

7

Si usted tiene una gran cantidad de datos que se repiten, que puede ser más fácil de procesar

 
<connections> 
    <connection>this</connection> 
    <connection>that</connection> 
    <connection>the other</connection> 
</connections> 

de lo que es para procesar

 
connection1=this 
connection2=that 
connection3=the other 

especialmente si usted está esperando a tener que almacenar una gran cantidad de datos, o debe almacenarse en una jerarquía definida

Si solo está almacenando algunos valores escalares, iré por el Enfoque de propiedades simples cada vez

+0

Sí, estaba planeando usarlo para diferentes valores. Ninguno de los datos se comparte con los otros archivos. –

1

XML es útil para complejas estructuras de datos o relaciones. Hace un trabajo decente por tener un "lenguaje común" entre los sistemas.

Sin embargo, xml tiene un costo. Es difícil de consumir. Uno tiene que cargar un programa de análisis, de que el archivo está en el formato correcto, encontrar la información etc ...

Mientras que los archivos de propiedades es de peso muy ligero y fácil de leer. Funciona para pares simples de clave/valor.

1

Depende de los datos que está codificando. Con XML, puede definir una representación más compleja de los datos de configuración en su aplicación. Tome algo como el marco Struts como un ejemplo. Dentro del marco, tiene una cantidad de clases de acción que pueden contener 1 ... n cantidad de ramas hacia adelante. Con un archivo de configuración XML, se puede definir como que:

<action class="MyActionClass"> 
    <forward name="prev" targetAction="..."/> 
    <forward name="next" targetAction="..."/> 
    <forward name="help" targetAction="..."/> 
</action> 

Este tipo de asociación es difícil de lograr usando sólo la representación par clave-valor del archivo de propiedades. Lo más probable es que necesite crear un carácter delimitador y luego incluir todas las acciones hacia adelante en una sola propiedad separada por este carácter delimitador. Es bastante trabajo para una solución hackish.

Sin embargo, como usted ha señalado, la sintaxis XML puede convertirse en una carga si lo que desea es afirmar algo muy simple, como el conjunto de características bla a verdadero.

13

La mayor ventaja de usar un archivo XML es que XML declara su codificación, mientras que .properties no.

Si está traduciendo estos archivos de propiedades para N idiomas, es posible que estos archivos podrían volver a aparecer en N diferentes codificaciones.Y si no tienes cuidado, tú u otra persona podrían corromper irreversiblemente las codificaciones de los personajes.

+2

Eso es simplemente incorrecto. Los archivos de propiedades de Java están definidos para tener ISO8859_1 como codificación, cada otra codificación está en contra de las especificaciones. Consulte http://java.sun.com/javase/6/docs/api/java/util/Properties.html para obtener más información. – Mnementh

+0

Dude: no 'declara' su codificación en el archivo. –

+6

Te estás perdiendo mi punto. Un editor de texto u otra herramienta obedecerán la codificación declarada de un archivo XML, pero como un archivo de propiedades no tiene tal declaración, le corresponde al usuario decidir en qué codificación guardarlo. Esa es una receta para problemas si está haciendo una traducción . –

4

Si tiene datos duplicados & espacios de nombres duplicados, utilice XML.

1) para emular sólo una estructura jerárquica en un archivo de propiedades, sólo tiene que utilizar la notación de puntos:

a.b=The Joker 
a.b.c=Batgirl 
a.b=Batman 
a.b=Superman 
a.b.c=Supergirl 

Por lo tanto, la representación de datos complejos (jerárquico) es * no es una razón para usar XML.

2) Para solo repetir datos, podemos utilizar una biblioteca de terceros como ini4j para vincular explícitamente en java un identificador de recuento en un cuantificador implícito en el propio archivo de propiedades.

a.b=The Joker 
a.b=Batgirl 
a.b=Batman 

se traduce a (en el fondo)

a.b1=The Joker 
a.b2=Batgirl 
a.b3=Batman 

Sin embargo, numeradores mismas propiedades del nombre todavía no mantiene las relaciones específicas entre padres e hijos. es decir. ¿Cómo representamos si Batgirl está con The Joker o Batman?

Por lo tanto, se requiere xml cuando se necesitan ambas funciones. Ahora podemos decidir si la primera entrada xml es lo que queremos o la 2da.

[a] 
    [b]Joker[/b] 
    [b] 
     [c]Batgirl[/c] 
    [/b] 
[a] 

O bien,

[a] 
    [b]Batman[/b] 
    [b] 
     [c]Batgirl[/c] 
    [/b] 
[/a] 

más detalle en .... http://ilupper.blogspot.com/2010/05/xml-vs-properties.html

+1

No entiendo ni siquiera el punto más básico aquí ... – KjetilNordin

+1

Hola, Kjetil, el punto aquí es qué puede representar una entrada de propiedades y qué puede representar una entrada xml. Fundamentalmente, debido a que la entrada de la propiedad carece de una semántica cercana, su estructura es menos "3D", como la mayoría de mis colegas lo expresó. Por lo tanto, si se intenta emular una estructura jerárquica con propiedades sobre xml, requerirían un bit de control. De lo contrario, surge la ambigüedad. – ilupper

0

Las desventajas de XML:

  1. Es difícil de leer - la las etiquetas lo hacen parecer más ocupado de lo que realmente es
  2. Las jerarquías y las etiquetas dificultan la edición y son más propensas a los errores humanos
  3. No se puede "agregar" a un archivo de propiedades XML para introducir una nueva propiedad o proporcionar un valor superior para una propiedad existente para que la última uno gana. La capacidad de agregar una propiedad puede ser muy poderosa: podemos implementar una lógica de administración de propiedades para que ciertas propiedades estén "activas" y no necesitemos reiniciar la instancia cuando estas cambien

La propiedad de Java archivo resuelve los problemas anteriores. Las convenciones de nomenclatura consistentes y la notación de puntos pueden ayudar a resolver el problema de la jerarquía.

Cuestiones relacionadas