Java属性:.properties文件vs xml?

pg-*_*ban 22 java xml properties

在涉及属性时,我是新手,我读到XML是存储这些的首选方式.然而,我注意到,编写一个常规.properties文件的风格

foo=bar
fu=baz
Run Code Online (Sandbox Code Playgroud)

也有效.这意味着更少的打字(也许更容易阅读和更高效).那么使用XML文件有什么好处呢?

Daf*_*aff 20

在XML中,您可以存储比属性文件中更复杂(例如,分层)的数据.所以这取决于你的用例.如果您只想存储少量直接属性,则属性文件更易于处理(尽管Java属性类也可以读取基于XML的属性).

无论如何,保持配置界面尽可能通用是有意义的,因此如果需要,可以切换到另一种表示(例如,通过使用Apache Commons Configuration).

  • 在得出结论之前,请检查/添加 Mike Sickler 的回答。你当然不想错过他的观点。 (2认同)

Mik*_*ler 15

使用XML文件的最大好处是XML声明了它的编码,而.properties却没有.

如果要将这些属性文件转换为N种语言,则这些文件可能会以N种不同的编码形式返回.如果你不小心,你或其他人可能会不可逆转地破坏角色编码.

  • 你错过了我的观点.文本编辑器或其他工具将遵循XML文件的声明编码,但由于属性文件没有这样的声明,因此由用户决定将其保存在哪种编码中.如果您正在进行翻译,这将是一个麻烦的方法. . (6认同)
  • 那是完全错的.Java属性文件被定义为具有ISO8859_1作为编码,每个其他编码都违反规范.有关更多信息,请参阅http://java.sun.com/javase/6/docs/api/java/util/Properties.html. (2认同)

Ben*_*ond 9

如果您有大量重复数据,则处理起来会更简单

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

而不是处理

connection1=this
connection2=that
connection3=the other

特别是如果您希望存储大量数据,或者必须存储在明确的层次结构中

如果你只是存储一些标量值,我每次都会选择简单的属性方法


ilu*_*per 5

如果您同时具有分层数据和重复的名称空间,请使用XML。

1)要仅在属性文件中模拟层次结构,只需使用点表示法即可:

a.b=The Joker
a.b.c=Batgirl
a.b=Batman
a.b=Superman
a.b.c=Supergirl
Run Code Online (Sandbox Code Playgroud)

因此,复杂的(分层的)数据表示不是*使用XML的原因。

2)对于仅重复数据,我们可以使用ini4j之类的第三方库在Java中显式固定属性文件本身中隐式量词上的计数标识符。

a.b=The Joker
a.b=Batgirl
a.b=Batman
Run Code Online (Sandbox Code Playgroud)

被翻译为(在后台)

a.b1=The Joker
a.b2=Batgirl
a.b3=Batman
Run Code Online (Sandbox Code Playgroud)

但是,对相同的名称属性进行计数仍然不能保持特定的父子关系。即。我们如何代表蝙蝠女与小丑或蝙蝠侠在一起?

因此,当同时需要两个功能时都需要xml。现在,我们可以确定第一个xml条目是我们想要的还是第二个。

[a]
   [b]Joker[/b]
   [b]
       [c]Batgirl[/c]
   [/b]
[a]
Run Code Online (Sandbox Code Playgroud)

- 要么 -

[a]
   [b]Batman[/b]
   [b]
       [c]Batgirl[/c]
   [/b]
[/a]
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参见.... http://ilupper.blogspot.com/2010/05/xml-vs-properties.html