2009-09-04 21 views
20

私はプロパティに関しては初心者ですが、XMLを格納するのが好ましい方法です。しかし、私は気づいた、スタイルの定期的な.propertiesファイルを書くことは、Javaプロパティ:.propertiesファイルとxml?

foo=bar 
fu=baz 

でも動作します。これは、タイピングが大幅に少なくなる(読みやすく、効率的である)ことを意味します。では、XMLファイルを使用する利点は何ですか?あなたは、繰り返しデータの多くを持っている場合

答えて

19

XMLでは、より複雑な(たとえば、階層的な)データを生成することができます。それはあなたのusecaseに依存します。少数の直接プロパティを保存したいだけの場合、プロパティファイルは扱いやすくなります(JavaプロパティクラスでもXMLベースのプロパティを読み取ることができます)。

設定インターフェースを可能な限り一般的なものにしておくことは意味があります。必要な場合は、別の表現に切り替えることに問題はありません(例:Apache Commons Configuration)。

+0

はFYI:) http://java.sun.com/javase/6/docs/api/java/util/Properties.html#loadFromXML(java.io.InputStream:java.util.Propertiesクラスは、XMLをサポートしています http://java.sun.com/javase/6/docs/api/java/util/Properties.html#storeToXML(java.io.OutputStream,%20java.lang.String) – Asaph

+0

編集:上記のURLがマングルされています閉じた括弧はリンクの一部でなければなりません。 – Asaph

+1

結論に至る前にMike Sicklerの答えをチェック/追加してください。あなたは確かに彼のポイントを見逃したくありません。 – Gerrard

7

、それはあなたが多くを保存するために持っている期待している場合は特に

 
connection1=this 
connection2=that 
connection3=the other 

を処理するよりも、

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

を処理するために簡単になることができますのデータ、またはそれを一定の階層に格納する必要があります

スカラー値をいくつか保存するだけの場合は、簡単なプロパティが毎回アプローチする

+0

ええ、私は別の値のためにそれを使用する予定でした。他のファイルと共有されるデータはありません。 –

1

XMLは、複雑なデータ構造や関係に便利です。システム間で「共通言語」を持つことはまともな仕事です。

ただし、xmlがかかります。その消費は重いです。パーサーをロードして、ファイルが正しい形式であることを確認し、情報などを見つけなければなりません。

プロパティファイルはかなり軽量で読みやすいですが。単純なキーと値のペアで動作します。

1

エンコードするデータによって異なります。 XMLを使用すると、アプリケーション内でより複雑な構成データを定義できます。例としてStrutsフレームワークのようなものをとりましょう。フレームワーク内には、1〜n個の前方分岐を含むことができるいくつかのActionクラスがあります。 XML設定ファイルでは、あなたはそれが好きで定義することができます。

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

協会のこの種は、プロパティファイルのちょうどキーと値のペアの表現を使用して達成することは困難です。たぶん、区切り文字で区切り、区切り文字で区切られた単一のプロパティにすべての前方操作を含める必要があります。それは、ハッキリした解決策のためのかなりの仕事です。

しかし、あなたが指摘したように、set feature blahをtrueにするなど、非常にシンプルなものを述べたい場合は、XML構文が負担になります。

13

XMLファイルを使用する最大の利点は、XMLではエンコードが宣言され、.propertiesではエンコードが行われないことです。

これらのプロパティファイルをN言語に翻訳する場合、これらのファイルがN通りの異なるエンコーディングで戻ってくる可能性があります。注意を払わないと、あなたや他の人が文字エンコーディングを不可逆的に破損する可能性があります。

+2

それは単に間違っています。 Javaのプロパティファイルは、ISO8859_1をエンコーディングとして定義され、他のすべてのエンコーディングは仕様に準拠しています。詳細は、http://java.sun.com/javase/6/docs/api/java/util/Properties.htmlを参照してください。 – Mnementh

+0

これはファイル内のエンコーディングを '宣言しません'。 –

+6

あなたは私のポイントを見逃しています。テキストエディタやその他のツールはXMLファイルの宣言されたエンコーディングに従いますが、プロパティファイルにはそのような宣言はありませんので、どのエンコーディングを保存するかはユーザが決めます。 。 –

4

階層データ&と重複する名前空間の両方がある場合は、XMLを使用します。プロパティにだけ階層構造をエミュレートする

1)ファイルは、単にドット表記を使用する:

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

したがって、複雑(階層)データ表現は* XMLを使用する理由はありません。

2)データだけを繰り返すために、我々は自分自身をプロパティファイルにJavaで明示的、暗黙的な数量詞の数識別子をPEGにini4jのようなサードパーティのライブラリを使用することができます。

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

は、同じ名前のプロパティは、まだ具体的な親子関係を維持しないnumerating、しかし

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

(バックグラウンドで)に変換されます。すなわち、バットガールがジョーカーかバットマンかどうかをどのように表しますか?

したがって、両方の機能が必要な場合はxmlが必要です。 1番目のXMLエントリが私たちが望むものか2番目のものかを判断できるようになりました。

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

- または -

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

さらに詳細に.... http://ilupper.blogspot.com/2010/05/xml-vs-properties.html

+1

ここで最も基本的な点についてもわかりません... – KjetilNordin

+1

こんにちはKjetil、ここでのポイントは、プロパティエントリが表すことができ、xmlエントリが表現できるものです。基本的には、プロパティのエントリは密接な意味がないため、私の同僚のほとんどが書いているように、構造はそれほど「3D」ではありません。したがって、xmlを超えるプロパティを持つ階層構造をエミュレートしようとすると、制御ビットが必要になります。さもなければ、あいまいさが生じる。 – ilupper

0

XMLの短所:

  1. それは読みにくいです - タグは実際よりも忙しく見えます
  2. の階層とタグは、編集するのは難しいとヒューマンエラー
  3. になりやすいそれは最後のように新しいプロパティを導入したり、既存のプロパティのオーバーライド値を提供するために、XMLプロパティファイルに「追加」することはできませんします1勝です。プロパティを追加する機能は非常に強力することができます - いくつかの特性が「ホット」であり、私たちは、インスタンスを再起動する必要がないように、我々はこの問題を回避財産管理ロジックを実装することができたときにこれらの変更

Javaプロパティファイルは上記の問題を解決します。一貫した命名規則とドット表記法は、階層の問題の解決に役立ちます。

関連する問題