我一直想知道为什么我需要一个Properties类,因为我总是可以创建一个HashMap并保持键/值对。可能是它减少了写入加载/存储属性文件的代码量。因为否则我们必须创建BufferedReader并读取文件并拆分String和所有这些。但是如果我们要从文件以外的源获取我们的键/值对,那么无论我们使用的是Properties类还是HashMap类,它们都没有任何区别。我只需要确认我的思维过程是否正确。
由于
答案 0 :(得分:4)
Properties
是一个自Java 1.0以来一直是Java的一部分的类.... 之前 Map
和HashMap
被引入。实际上,您会看到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}})并想要修改它,则必须再次构建代码。属性的主要优点是它们存储在源代码外部或外部,因此允许您在需要时对其进行修改。