2009-09-04 21 views
20

Sono un principiante quando si tratta di proprietà, e ho letto che XML è il modo preferito per archiviarli. Ho notato comunque che scrivere un file .properties regolare nello stile diProprietà Java: file .properties vs xml?

foo=bar 
fu=baz 

funziona anche. Ciò significherebbe molto meno la digitazione (e forse anche più facile da leggere e più efficiente). Quindi quali sono i vantaggi dell'utilizzo di un file XML?

risposta

19

In XML è possibile memorizzare più complesse (ad es. gerarchico) rispetto a un file di proprietà. Quindi dipende dal tuo caso. Se si desidera archiviare un numero limitato di proprietà dirette, è più semplice gestire un file delle proprietà (sebbene la classe delle proprietà Java possa leggere anche le proprietà basate su XML).

Avrebbe senso mantenere comunque l'interfaccia di configurazione più generica possibile, quindi non è necessario passare a un'altra rappresentazione (ad esempio utilizzando Apache Commons Configuration) se necessario.

+0

FYI: la classe java.util.Properties supporta 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

Modifica: gli URL sopra vengono maciullati il paren di chiusura dovrebbe far parte dei collegamenti. – Asaph

+1

per favore controlla/aggiungi la risposta di Mike Sickler prima di giungere a una conclusione. Certamente non vuoi perdere il suo punto. – Gerrard

7

Se si dispone di un sacco di dati ripetuti, può essere più semplice da elaborare

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

di quanto lo sia per elaborare

 
connection1=this 
connection2=that 
connection3=the other 

soprattutto se vi aspettate di dover memorizzare un sacco dei dati, oppure deve essere conservato in una gerarchia definita

Se sono solo la memorizzazione di un paio di valori scalari, però, mi piacerebbe andare per la Semplice approccio delle proprietà ogni volta

+0

Sì, stavo progettando di usarlo per valori diversi. Nessuno dei dati è condiviso con gli altri file. –

1

L'XML è utile per strutture e relazioni dati complesse. Fa un lavoro decente per avere un "linguaggio comune" tra i sistemi.

Tuttavia, xml ha un costo. È pesante da consumare. Hai avuto modo di caricare un parser, assicurarsi che il file è in formato corretto, trovare le informazioni ecc ...

Mentre file di proprietà è il peso abbastanza leggero e di facile lettura. Funziona con semplici coppie chiave/valore.

1

Dipende dai dati che stai codificando. Con XML, è possibile definire una rappresentazione più complessa dei dati di configurazione nell'applicazione. Prendi qualcosa come la struttura dei montanti come esempio. All'interno del framework hai un certo numero di classi Action che possono contenere 1 ... n numero di rami forward. Con un file di configurazione XML, è possibile definire le cose come:

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

Questo tipo di associazione è difficile da realizzare utilizzando solo la coppia Rappresentazione del valore-chiave del file delle proprietà. Molto probabilmente, dovresti trovare un carattere di delimitazione e quindi includere tutte le azioni in avanti su una singola proprietà separate da questo carattere di delimitazione. È un bel po 'di lavoro per una soluzione hacker.

Eppure, come lei ha sottolineato, la sintassi XML può diventare un peso se si vuole semplicemente affermare qualcosa di molto semplice, come set di funzionalità bla su true.

13

Il più grande vantaggio di utilizzare un file XML è che XML dichiara la sua codifica, mentre .properties non lo fa.

Se si sta traducendo questi file di immobili da N lingue, è possibile che questi file potrebbero tornare in N differenti codifiche.E se non stai attento, tu o qualcun altro potrebbero corrompere irreversibilmente le codifiche dei personaggi.

+2

Questo è semplicemente sbagliato. I file di proprietà Java sono definiti per avere ISO8859_1 come codifica, ogni altra codifica è contro specifica. Vedere http://java.sun.com/javase/6/docs/api/java/util/Properties.html per ulteriori informazioni. – Mnementh

+0

Amico: non "dichiara" la sua codifica nel file. –

+6

Ti manca il mio punto. Un editor di testo o un altro strumento obbediranno alla codifica dichiarata di un file XML, ma dal momento che un file di proprietà non ha tale dichiarazione, spetta all'utente decidere quale codifica salvarla. Questa è una soluzione per problemi se stai facendo la traduzione . –

4

Se si dispone di entrambi i dati gerarchici & spazi dei nomi duplicati, utilizzare XML.

1) per emulare solo una struttura gerarchica in un file di proprietà, è sufficiente utilizzare la notazione del punto:

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

Quindi, complesso (gerarchico) rappresentazione dei dati * non un motivo per utilizzare XML.

2) Per i soli dati ripetuti, è possibile utilizzare una libreria di terze parti come ini4j per eseguire il peg esplicitamente in java un identificativo del conteggio su un quantificatore implicito nel file delle proprietà stesso.

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

è tradotto al (sullo sfondo)

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

Tuttavia, numerating stesse proprietà del nome ancora non mantiene le specifiche relazioni padre-figlio. vale a dire. come possiamo rappresentare se Batgirl è con The Joker o Batman?

Quindi, xml è richiesto quando entrambe le funzionalità sono necessarie. Ora possiamo decidere se la prima voce xml è ciò che vogliamo o la seconda.

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

--ovvero--

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

Ulteriori dettagli in .... http://ilupper.blogspot.com/2010/05/xml-vs-properties.html

+1

Non capisco nemmeno il punto più semplice qui ... – KjetilNordin

+1

Ciao Kjetil, il punto qui è ciò che una voce di proprietà può rappresentare e cosa può rappresentare una voce xml. Fondamentalmente, poiché la voce di proprietà manca di una semantica chiusa, la sua struttura è meno "3D" come la maggior parte dei miei colleghi ha detto. Pertanto, se si tenta di emulare una struttura gerarchica con proprietà su xml, richiederebbe un bit di controllo. Altrimenti, sorge l'ambiguità. – ilupper

0

Gli svantaggi di XML:

  1. E 'difficile da leggere - il i tag lo rendono più appariscente di quanto lo sia realmente
  2. Le gerarchie e i tag rendono difficile la modifica e più inclini agli errori umani
  3. Non è possibile "accodare" a un file di proprietà XML per introdurre una nuova proprietà o fornire un valore prevalente per una proprietà esistente in modo che l'ultimo uno vince. La possibilità di aggiungere una proprietà può essere molto efficace: possiamo implementare una logica di gestione della proprietà in modo tale che alcune proprietà siano "calde" e non abbiamo bisogno di riavviare l'istanza quando queste cambiano

Proprietà Java il file risolve i problemi di cui sopra. Convenzioni di denominazione e notazione dei punti coerenti possono aiutare a risolvere il problema della gerarchia.