【Java I/O 流】4 - 11 Properties 类
§4-11 Properties
类
4-11.1 Hashtable
线程安全的哈希表
Hashtable
是一个位于 java.util
包下的类,继承自抽象类 Dictionary
(现已过时,推荐使用 Map
接口的实现类)。
Hashtable
是一个线程安全的哈希映射表,是 Java 集合框架的一个成员。一般情况下,若无特殊要求,建议使用 HashMap
,若同时需要满足线程安全和高并发要求,则考虑使用 ConcurrentHashMap
。
Hashtable
实现了 Map
接口,意味着它实现了所有与 Map
有关的方法.。除了线程安全外,Hashtable
的默认初始长度为 11,而不是 16,但加载因子相同。
该类具有两个子类,Properties
和 UIDefaults
,意味着它们也属于哈希表。
本节内容重点介绍 Properties
类。
4-11.2 Properties
属性类
Properties
表示一组属性,Properties
类用一个键值对表示一个属性。Properties
中的内容可以通过 I/O 流存储或读取,每一个属性的键和对应的值都是一个字符串。
虽然 Properties
属于哈希表,但不像 Hashtable
和 HashMap
,它不是泛型类。但可以接收任意类型数据(Object
),通常,都会向 Properties
中存入字符串。
Properties
用字符串表示属性键值对以及其能关联 I/O 流的能力,使得它能够用于保存和读取属性文件,扩展名为 properties
。
Properties
类还可用作输出和读取 XML 文件,通过相关 API 实现。
构造方法:
构造方法 | 描述 |
---|---|
Properties() |
创建一个空属性表,无任何默认值 |
I/O 流相关方法:
方法 | 描述 |
---|---|
void store(OuputStream out, String comments) |
将 Properties 中的属性键值对写出到指定输出流中 |
void store(Writer writer, String comments) |
将 Properties 中的属性键值对写出到指定写入器中 |
void storeToXML(OutputStream os, String comment) void storeToXML(OutputStream os, String comment, String encoding) void storeToXML(OutputStream os, String comment, Charset charset) |
生成一份表示表中所有属性的 XML 文档 |
void load(InputStream inStream) |
从字节流中读取属性表 |
void load(Reader reader) |
从字符输入流中读取属性表 |
void loadFromXML(InputStream in) |
通过输入流,读取 XML 文件中所表示的所有属性 |
void list(PrintStream out) void list(PrintWriter out) |
将属性表打印到指定输出流中 |
添加和获取属性键值对的方法:不建议使用 put
和 putAll
方法添加属性值,这种方法允许调用者插入非字符串条目。相反,应当使用 setProperty
方法添加数据。
方法 | 描述 |
---|---|
Object serProperty(String key, String value) |
底层调用 put 方法,添加数据 |
String getProperty(String key) |
在表中搜索指定键,返回对应值 |
用处:Properties
的特点使得它能够用于存储和恢复程序配置。其他常用的配置文件有 ini
, xml
, yaml
等。