为什么我们在java中需要Properties类?

时间:2016-05-05 22:18:48

标签: java

我一直想知道为什么我需要一个Properties类,因为我总是可以创建一个HashMap并保持键/值对。可能是它减少了写入加载/存储属性文件的代码量。因为否则我们必须创建BufferedReader并读取文件并拆分String和所有这些。但是如果我们要从文件以外的源获取我们的键/值对,那么无论我们使用的是Properties类还是HashMap类,它们都没有任何区别。我只需要确认我的思维过程是否正确。

由于

3 个答案:

答案 0 :(得分:4)

Properties是一个自Java 1.0以来一直是Java的一部分的类.... 之前 MapHashMap被引入。实际上,您会看到Properties扩展了Hashtable的前身{遗留} HashMap类。

Properties以系统属性对象的形式在相当大比例的Java应用程序中扮演重要角色。在不引入兼容性问题的情况下,不能在该角色中替换它。 (即使是引入第二个(双重)属性机制的更改也会有问题...因为某些代码写入系统Properties对象。)

Properties具有HashMap未提供的一些重要功能;即能够以2种标准的人类可读格式加载和保存属性。

  

可能会减少写入加载/存储属性文件的代码量。因为否则我们必须创建BufferedReader并读取文件并拆分String和所有这些。

是。您会发现属性文件语法比使用split或正则表达式解析更复杂。看看这里描述的语法:

  

但是如果我们要从文件以外的来源获取我们的键/值对,那么无论我们使用的是Properties类还是HashMap类,它们都没有任何区别。

再次,正确。对于该用例,HashMap甚至可能更优越。 Properties / Hashtable的大多数方法都是同步的。如果您不需要同步,则会产生(小)性能损失。

答案 1 :(得分:1)

正如您所说,Properties类确实能够从/向磁盘读取/保存,但它不仅仅是这样做。它可以从任何InputStream读取和存储,因此您可以从Properties解析String,或从Properties或{{1}读取URL或者你有什么。它也可以将Socket转换为XML,而不是像10年前那样有用,但它仍然是一个很酷的功能。最重要的是,您不必为下面文章中描述的语法编写自己的解析器:

https://en.wikipedia.org/wiki/.properties

它允许您在程序之外定义程序的参数,因此您的程序可以保持通用性,并且您的配置不必硬编码到您的应用程序中。

答案 2 :(得分:0)

易于维护:如果从属性文件中更改了任何信息,则无需重新编译java类。换句话说,使用属性文件的优点是我们可以配置在一段时间内易于更改的内容,而无需更改代码中的任何内容。

属性文件是一个简单的键值对集合,可以由enum类进行解析。

属性文件主要用于存储配置或本地化数据。 它们用于外部化可配置到应用程序的数据。如果您将这些数据放在代码中(作为class或{{1}})并想要修改它,则必须再次构建代码。属性的主要优点是它们存储在源代码外部或外部,因此允许您在需要时对其进行修改。