Java属性:.properties文件vs xml?

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

foo=bar fu=baz 

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

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

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

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

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

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

 <连接>
   <连接>此
   <连接>那
   另一个
 

而不是处理

连接1 =此
连接2 =那
 connection3 =另一个

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

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

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

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

 ab=The Joker abc=Batgirl ab=Batman ab=Superman abc=Supergirl 

因此,复杂(分层)数据表示不是使用xml的理由。

2)对于仅重复数据,我们可以使用像ini4j这样的第三方库在java中明确地在属性文件本身的隐式量词上查找计数标识符。

 ab=The Joker ab=Batgirl ab=Batman 

被翻译成(在后台)

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

但是,计算相同的名称属性仍然不能维持特定的父子关系。 即。 我们如何表示Batgirl是与The Joker还是Batman?

因此,当需要两个function时,需要xml。 我们现在可以决定第一个xml条目是我们想要的还是第二个。

 [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

XML对于复杂的数据结构和/或关系非常方便。 它在系统之间拥有“通用语言”的工作做得不错。

但是,xml需要付出代价。 它的消耗量很大。 您必须加载解析器,确保文件格式正确,查找信息等…

而属性文件非常轻,易于阅读。 适用于简单的键/值对。

这取决于您编码的数据。 使用XML,您可以在应用程序中定义更复杂的配置数据表示。 以struts框架为例。 在框架内,您有许多Action类,可以包含1 … n个前向分支。 使用XML配置文件,您可以将其定义为:

      

仅使用属性文件的键值对表示很难实现这种关联。 最有可能的是,您需要提出一个分隔符,然后将所有前向动作包含在由此分隔符分隔的单个属性上。 对于一个hackish解决方案来说,这是相当多的工作。

然而,正如您所指出的,如果您只想表达一些非常简单的内容,例如将function设置为true,则XML语法可能会成为负担。

XML的缺点:

  1. 它很难读 – 标签使它看起来比实际更繁忙
  2. 层次结构和标记使编辑变得困难,更容易出现人为错误
  3. 无法“附加”到XML属性文件以引入新属性或为现有属性提供覆盖值,以便最后一个获胜。 附加属性的能力非常强大 – 我们可以围绕此实现属性管理逻辑,以便某些属性“热”,并且当这些更改时我们不需要重新启动实例

Java属性文件解决了上述问题。 一致的命名约定和点符号可以帮助解决层次结构问题。