私はプロパティに関しては初心者ですが、XMLを格納するのが好ましい方法です。しかし、私は気づいた、スタイルの定期的な.propertiesファイルを書くことは、Javaプロパティ:.propertiesファイルとxml?
foo=bar
fu=baz
でも動作します。これは、タイピングが大幅に少なくなる(読みやすく、効率的である)ことを意味します。では、XMLファイルを使用する利点は何ですか?あなたは、繰り返しデータの多くを持っている場合
私はプロパティに関しては初心者ですが、XMLを格納するのが好ましい方法です。しかし、私は気づいた、スタイルの定期的な.propertiesファイルを書くことは、Javaプロパティ:.propertiesファイルとxml?
foo=bar
fu=baz
でも動作します。これは、タイピングが大幅に少なくなる(読みやすく、効率的である)ことを意味します。では、XMLファイルを使用する利点は何ですか?あなたは、繰り返しデータの多くを持っている場合
XMLでは、より複雑な(たとえば、階層的な)データを生成することができます。それはあなたのusecaseに依存します。少数の直接プロパティを保存したいだけの場合、プロパティファイルは扱いやすくなります(JavaプロパティクラスでもXMLベースのプロパティを読み取ることができます)。
設定インターフェースを可能な限り一般的なものにしておくことは意味があります。必要な場合は、別の表現に切り替えることに問題はありません(例:Apache Commons Configuration)。
、それはあなたが多くを保存するために持っている期待している場合は特に
connection1=this connection2=that connection3=the other
を処理するよりも、
<connections> <connection>this</connection> <connection>that</connection> <connection>the other</connection> </connections>
を処理するために簡単になることができますのデータ、またはそれを一定の階層に格納する必要があります
スカラー値をいくつか保存するだけの場合は、簡単なプロパティが毎回アプローチする
ええ、私は別の値のためにそれを使用する予定でした。他のファイルと共有されるデータはありません。 –
XMLは、複雑なデータ構造や関係に便利です。システム間で「共通言語」を持つことはまともな仕事です。
ただし、xmlがかかります。その消費は重いです。パーサーをロードして、ファイルが正しい形式であることを確認し、情報などを見つけなければなりません。
プロパティファイルはかなり軽量で読みやすいですが。単純なキーと値のペアで動作します。
エンコードするデータによって異なります。 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構文が負担になります。
XMLファイルを使用する最大の利点は、XMLではエンコードが宣言され、.propertiesではエンコードが行われないことです。
これらのプロパティファイルをN言語に翻訳する場合、これらのファイルがN通りの異なるエンコーディングで戻ってくる可能性があります。注意を払わないと、あなたや他の人が文字エンコーディングを不可逆的に破損する可能性があります。
それは単に間違っています。 Javaのプロパティファイルは、ISO8859_1をエンコーディングとして定義され、他のすべてのエンコーディングは仕様に準拠しています。詳細は、http://java.sun.com/javase/6/docs/api/java/util/Properties.htmlを参照してください。 – Mnementh
これはファイル内のエンコーディングを '宣言しません'。 –
あなたは私のポイントを見逃しています。テキストエディタやその他のツールはXMLファイルの宣言されたエンコーディングに従いますが、プロパティファイルにはそのような宣言はありませんので、どのエンコーディングを保存するかはユーザが決めます。 。 –
階層データ&と重複する名前空間の両方がある場合は、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
ここで最も基本的な点についてもわかりません... – KjetilNordin
こんにちはKjetil、ここでのポイントは、プロパティエントリが表すことができ、xmlエントリが表現できるものです。基本的には、プロパティのエントリは密接な意味がないため、私の同僚のほとんどが書いているように、構造はそれほど「3D」ではありません。したがって、xmlを超えるプロパティを持つ階層構造をエミュレートしようとすると、制御ビットが必要になります。さもなければ、あいまいさが生じる。 – ilupper
XMLの短所:
Javaプロパティファイルは上記の問題を解決します。一貫した命名規則とドット表記法は、階層の問題の解決に役立ちます。
は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
編集:上記のURLがマングルされています閉じた括弧はリンクの一部でなければなりません。 – Asaph
結論に至る前にMike Sicklerの答えをチェック/追加してください。あなたは確かに彼のポイントを見逃したくありません。 – Gerrard