public class Properties extends Hashtable<Object,Object>
Properties
类表示一组持久的属性。
Properties
可以保存到流中或从流中加载。
属性列表中的每个键及其对应的值都是一个字符串。
属性列表可以包含另一个属性列表作为其“默认值”; 如果在原始属性列表中找不到属性键,则会搜索此第二个属性列表。
因为Properties
从继承Hashtable
时, put
种putAll
方法可应用于Properties
对象。 强烈不鼓励使用它们,因为它们允许调用者插入其键或值不是Strings
。 应该使用setProperty
方法。 如果store
或save
方法在包含非String
键或值的“受损害” Properties
对象上调用,则调用将失败。 类似地,如果在包含非String
密钥的“受损害” Properties
对象上调用propertyNames
或list
方法的调用将失败。
load(Reader)
/ store(Writer, String)
方法从以下指定的简单的线性导向格式加载和存储基于字符的流的属性。 load(InputStream)
/ store(OutputStream, String)
方法与加载(读取器)/存储(Writer,String)对相同,除了输入/输出流以ISO 8859-1字符编码编码。 在该编码中不能直接表示的字符可以使用The Java™ Language Specification的 3.3节中定义的Unicode转义来编写; 在转义序列中只允许使用单个“u”字符。 native2ascii工具可用于将属性文件转换为其他字符编码。
loadFromXML(InputStream)
和storeToXML(OutputStream, String, String)
方法以简单的XML格式加载和存储属性。 默认情况下,使用UTF-8字符编码,但是如果需要,可以指定特定编码。 需要实现支持UTF-8和UTF-16,并可能支持其他编码。 XML属性文档具有以下DOCTYPE声明:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
请注意,导出或导入属性时不会访问系统URI(http://java.sun.com/dtd/properties.dtd);
它只是作为一个字符串来唯一地标识DTD,它是:
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD for properties -->
<!ELEMENT properties ( comment?, entry* ) >
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA) >
<!ELEMENT entry (#PCDATA) >
<!ATTLIST entry key CDATA #REQUIRED>
这个类是线程安全的:多个线程可以共享一个Properties对象,而不需要外部同步。
Modifier and Type | Field and Description |
---|---|
protected Properties |
defaults
属性列表,其中包含此属性列表中未找到的任何键的默认值。
|
Constructor and Description |
---|
Properties()
创建一个没有默认值的空属性列表。
|
Properties(Properties defaults)
创建具有指定默认值的空属性列表。
|
Modifier and Type | Method and Description |
---|---|
String |
getProperty(String key)
使用此属性列表中指定的键搜索属性。
|
String |
getProperty(String key, String defaultValue)
使用此属性列表中指定的键搜索属性。
|
void |
list(PrintStream out)
将此属性列表打印到指定的输出流。
|
void |
list(PrintWriter out)
将此属性列表打印到指定的输出流。
|
void |
load(InputStream inStream)
从输入字节流读取属性列表(键和元素对)。
|
void |
load(Reader reader)
以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。
|
void |
loadFromXML(InputStream in)
将指定输入流中的XML文档表示的所有属性加载到此属性表中。
|
Enumeration<?> |
propertyNames()
返回此属性列表中所有键的枚举,包括默认属性列表中的不同键,如果尚未从主属性列表中找到相同名称的键。
|
void |
save(OutputStream out, String comments)
已弃用
如果在保存属性列表时发生I / O错误,此方法不会抛出IOException。
保存属性列表的
store(OutputStream out, String comments) 方法是通过store(OutputStream out, String comments) 方法或storeToXML(OutputStream os, String comment) 方法。
|
Object |
setProperty(String key, String value)
致电
Hashtable方法
put 。
|
void |
store(OutputStream out, String comments)
|
void |
store(Writer writer, String comments)
将此属性列表(键和元素对)写入此
Properties 表中,以适合使用
load(Reader) 方法的格式输出到输出字符流。
|
void |
storeToXML(OutputStream os, String comment)
发出表示此表中包含的所有属性的XML文档。
|
void |
storeToXML(OutputStream os, String comment, String encoding)
使用指定的编码发出表示此表中包含的所有属性的XML文档。
|
Set<String> |
stringPropertyNames()
返回此属性列表中的一组键,其中键及其对应的值为字符串,包括默认属性列表中的不同键,如果尚未从主属性列表中找到相同名称的键。
|
clear, clone, compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, forEach, get, getOrDefault, hashCode, isEmpty, keys, keySet, merge, put, putAll, putIfAbsent, rehash, remove, remove, replace, replace, replaceAll, size, toString, values
protected Properties defaults
public Properties()
public Properties(Properties defaults)
defaults
- 默认值。
public Object setProperty(String key, String value)
put
。
提供与getProperty方法的并行性 。
强制使用字符串的属性键和值。
返回的值是Hashtable调用put
的结果。
key
- 要放入此属性列表的关键字。
value
- 对应的值为
key 。
null
。
getProperty(java.lang.String)
public void load(Reader reader) throws IOException
属性按照行进行处理。 有两种线, 自然线和逻辑线 。 自然行被定义为由一组行终止符( \n
或\r
或\r\n
)或流结尾终止的一行字符。 自然线可以是空白行,注释行或保持键或键的一部分。 逻辑行保存键元素对的所有数据,该元素对可以通过以反斜杠字符\
转义线终止符序列来跨越多个相邻的自然行\
。 请注意,注释行不能以这种方式扩展; 每个自然界线都是自己的评论指标,如下所述。 从输入读取行,直到流到达结束。
仅包含空白字符的自然行被视为空白,并被忽略。 注释行具有ASCII '#'
或'!'
作为其第一个非空白字符; 注释行也被忽略,不对key-element信息进行编码。 除了线终止子,此格式考虑字符空间( ' '
, '\u0020'
),标签( '\t'
, '\u0009'
),和形式进料( '\f'
, '\u000C'
)是白色的空间。
如果逻辑行分布在几条自然行中,则反斜杠将转义行终止符序列,行终止符序列以及以下行开始处的任何空格对键或元素值都没有影响。 关键和元素解析的剩余部分(加载时)将假设所有构成键和元素的字符在行连续字符被删除后出现在单个自然行上。 请注意,这是不够的,只检查字符行终止序列之前,以决定是否行结束逃脱; 必须有奇数数量的连续反斜线才能转义线终止符。 由于输入是从左到右处理的,所以在线程终止符(或其他地方)之前,非零偶数的2 n个连续的反斜杠在转义处理后编码n个反斜杠。
该键包含从第一个非空格字符开始的行中的所有字符,直到但不包括第一个未'='
':'
或除行终止符之外的空白字符。 所有这些密钥终止字符可以通过用前面的反斜杠字符进行转义而包含在密钥中; 例如,
\:\=
将是双字符键":="
。 可以使用\r
和\n
转义序列来包括\r
\n
符字符。 钥匙之后任何空格被跳过; 如果键后的第一个非空白字符为'='
或':'
,则会被忽略,并且其后面的任何空白字符也将被跳过。 线上的所有剩余字符都成为相关元素字符串的一部分; 如果没有剩余的字符,元素是空字符串""
。 一旦构成密钥和元素的原始字符序列被识别,则如上所述执行逃逸处理。
作为示例,以下三行中的每一行指定密钥"Truth"
和相关联的元素值"Beauty"
:
Truth = Beauty
Truth:Beauty
Truth :Beauty
作为另一个例子,以下三行指定单个属性:
fruits apple, banana, pear, \
cantaloupe, watermelon, \
kiwi, mango
关键是"fruits"
,相关元素是:
"apple, banana, pear, cantaloupe, watermelon, kiwi, mango"
请注意,在每个\
之前会出现一个空格,以便在最终结果中的每个逗号后面会出现一个空格;
\
线路终端器和连续线上的前导空格仅被丢弃, 不被一个或多个其他字符替代。
作为第三个例子,行:
cheeses
指定键为"cheeses"
,相关元素为空字符串""
。
键和元素中的字符可以用类似于用于字符和字符串文字的转义序列来表示(参见The Java™ Language Specification的 3.3和3.10.6)。 与用于字符和字符串的字符转义序列和Unicode转义的区别是:
\b
不表示退格字符。 \
,非有效的转义字符作为一个错误之前; 反斜杠默默地掉下来。 例如,在Java字符串中,序列"\z"
将导致编译时错误。 相比之下,此方法会静默地丢弃反斜杠。 因此,该方法将两个字符序列"\b"
对应于单个字符'b'
。 此方法返回后指定的流保持打开状态。
reader
- 输入字符流。
IOException
- 从输入流读取时是否发生错误。
IllegalArgumentException
- 输入中是否出现格式错误的Unicode转义。
public void load(InputStream inStream) throws IOException
load(Reader)
中规定的简单的面向行的格式,假设使用ISO 8859-1字符编码;
每个字节是一个拉丁字符。
不在Latin1中的字符和某些特殊字符在键和元素中使用The Java™ Language Specification的 3.3节中定义的Unicode转义来表示 。
此方法返回后指定的流保持打开状态。
inStream
输入流。
IOException
- 从输入流读取时是否发生错误。
IllegalArgumentException
- 如果输入流包含格式不正确的Unicode转义序列。
@Deprecated public void save(OutputStream out, String comments)
store(OutputStream out, String comments)
方法是通过store(OutputStream out, String comments)
方法或storeToXML(OutputStream os, String comment)
方法。
store(OutputStream out, String comments)
方法并禁止抛出的IOExceptions。
out
- 输出流。
comments
- 属性列表的描述。
ClassCastException
- 如果此
Properties
对象包含任何不是
Strings
键或值。
public void store(Writer writer, String comments) throws IOException
Properties
表中的此属性列表(键和元素对)以适合使用load(Reader)
方法的格式写入输出字符流。
此Properties
表的默认表(如果有)的Properties
未被此方法写出。
如果comments参数不为空,则首先将ASCII #
字符,注释字符串和行分隔符写入输出流。 因此, comments
可以作为识别评论。 由注释中的换行符('\ n'),回车符('\ r')或回车符后面的换行符替换为由Writer生成的行分隔Writer
,如果下一个字符在评论不是字符#
或字符!
那么ASCII #
是该行分隔符后写出。
接下来,注释行始终写入,由ASCII #
组成,当前日期和时间(如当前时间Date
的toString
方法生成的)以及由Writer生成的行分隔Writer
。
然后,这个Properties
表中的每个条目都被写出,每行一个。 对于每个条目,键字符串被写入,然后是ASCII =
,然后是相关联的元素字符串。 对于密钥,所有空格字符都用前面的\
字符写入。 对于元素,前导空格字符,但不是嵌入或尾随空格字符,写入前面的\
字符。 键和元素字符#
, !
, =
和:
被写入时加上正斜杠,以确保它们被正确装载。
在写入条目之后,输出流被刷新。 此方法返回后,输出流保持打开状态。
writer
- 输出字符流写入器。
comments
- 属性列表的描述。
IOException
- 如果将此属性列表写入指定的输出流,则会抛出一个
IOException 。
ClassCastException
- 如果此
Properties
对象包含任何不是
Strings
键或值。
NullPointerException
- 如果
writer
为空。
public void store(OutputStream out, String comments) throws IOException
Properties
表中,以适合于使用load(InputStream)
方法加载到Properties
表中的格式输出流。
此Properties
表(如果有)的默认表的Properties
不会被此方法写出。
该方法在输出中所指定的相同的格式的注释,属性的键和值store(Writer)
,有以下区别:
\u
xxxx ,用于其相应的unicode十六进制值xxxx 。 \u0020
和大于字符\u007E
在属性键或值被写为\u
XXXX为适当的十六进制值XXXX。 在写入条目之后,输出流被刷新。 此方法返回后,输出流保持打开状态。
out
- 输出流。
comments
- 属性列表的描述。
IOException
- 如果将此属性列表写入指定的输出流,则会抛出一个
IOException 。
ClassCastException
- 如果此
Properties
对象包含任何不是
Strings
键或值。
NullPointerException
- 如果
out
为空。
public void loadFromXML(InputStream in) throws IOException, InvalidPropertiesFormatException
XML文档必须具有以下DOCTYPE声明:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
此外,文件必须满足上述性质DTD。
需要一个实现来读取使用“ UTF-8
”或“ UTF-16
”编码的XML文档。 实现可以支持额外的编码。
指定的流在此方法返回后关闭。
in
- 从中读取XML文档的输入流。
IOException
- 如果从指定的输入流读取导致
IOException 。
UnsupportedEncodingException
- 如果文档的编码声明可以被读取,并指定不支持的编码
InvalidPropertiesFormatException
- 输入流上的数据不构成具有强制文档类型的有效XML文档。
NullPointerException
- 如果
in
为空。
storeToXML(OutputStream, String, String)
,
Character Encoding in Entities
public void storeToXML(OutputStream os, String comment) throws IOException
这种props.storeToXML(os, comment)形式的方法的调用方式与调用props.storeToXML(os, comment, "UTF-8");完全相同 。
os
- 发送XML文档的输出流。
comment
- 属性列表的描述,如果没有评论,
null
。
IOException
- 如果写入指定的输出流导致
IOException 。
NullPointerException
- 如果
os
为空。
ClassCastException
- 如果此
Properties
对象包含任何不是
Strings
键或值。
loadFromXML(InputStream)
public void storeToXML(OutputStream os, String comment, String encoding) throws IOException
XML文档将具有以下DOCTYPE声明:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
如果指定的注释是null
则文档中不会存储注释。
需要一个实现来支持使用“ UTF-8
”或“ UTF-16
”编码的XML文档的写入。 实现可以支持额外的编码。
此方法返回后指定的流保持打开状态。
os
- 要在其上发出XML文档的输出流。
comment
- 属性列表的描述,如果没有评论,
null
。
encoding
- 支持的名称
character encoding
IOException
- 如果写入指定的输出流导致一个
IOException 。
UnsupportedEncodingException
- 如果实现不支持编码。
NullPointerException
- 如果
os
是
null
,或者如果
encoding
是
null
。
ClassCastException
- 如果此
Properties
对象包含任何不是
Strings
键或值。
loadFromXML(InputStream)
,
Character Encoding in Entities
public String getProperty(String key)
null
。
key
- 属性键。
setProperty(java.lang.String, java.lang.String)
,
defaults
public String getProperty(String key, String defaultValue)
key
- 哈希表键。
defaultValue
- 默认值。
setProperty(java.lang.String, java.lang.String)
,
defaults
public Enumeration<?> propertyNames()
ClassCastException
- 如果此属性列表中的任何键不是字符串。
Enumeration
, defaults
, stringPropertyNames()
public Set<String> stringPropertyNames()
返回的集合不由Properties对象支持。 对此Properties的更改不会反映在该集合中,反之亦然。
defaults
public void list(PrintStream out)
out
- 输出流。
ClassCastException
- 如果此属性列表中的任何键不是字符串。
public void list(PrintWriter out)
out
- 输出流。
ClassCastException
- 如果此属性列表中的任何键不是字符串。