0%

8.6.4 使用Properties读写属性文件

8.6.4 使用Properties读写属性文件

Properties类是Hashtable类的子类,正如它的名字所暗示的,该对象在处理属性文件时特别方便( Windows操作平台上的.ini文件就是一种属性文件)。

Properties功能

Properties类可以把Map对象和属性文件关联起来,从而可以把Map对象中的key-value对写入属性文件中,也可以把属性文件中的”属性名=属性值“加载到Map对象中。由于属性文件里的属性名、属性值只能是字符串类型,所以Properties里的keyvaue都是字符串类型。

Properties类方法

修改key-value的方法

该类提供了如下三个方法来修改Properties里的keyvalue

方法 描述
String getProperty(String key) 获取Properties中指定属性名对应的属性值,类似于Mapget(Object key)方法。
String getProperty(String key, String defaultValue) 该方法与前一个方法基本相似。该方法多一个功能,如果Properties中不存在指定的key时,则该方法返回第二个参数作为默认值。
Object setProperty(String key, String value) 设置属性值,类似于Hashtableput()方法。
### 读写属性文件的方法 ###
除此之外,它还提供了两个读写属性文件的方法。
方法 描述
void load(InputStream inStream) 从属性文件(以输入流表示)中加载key-value对,把加载到的key-value对追加到Properties里(PropertiesHashtable的子类,它不保证key-value对之间的次序)。
void store(OutputStream out, String comments) Properties中的key-value对输出到指定的属性文件(以输出流表示)中。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
import java.io.*;

public class PropertiesTest
{
public static void main(String[] args)
throws Exception
{
Properties props = new Properties();
// 向Properties中增加属性
props.setProperty("username" , "yeeku");
props.setProperty("password" , "123456");
// 将Properties中的key-value对保存到a.ini文件中
props.store(new FileOutputStream("a.ini")
, "comment line"); //①
// 新建一个Properties对象
Properties props2 = new Properties();
// 向Properties中增加属性
props2.setProperty("gender" , "male");
// 将a.ini文件中的key-value对追加到props2中
props2.load(new FileInputStream("a.ini") ); //②
System.out.println(props2);
}
}

上面程序示范了Properties类的用法,其中①代码处将Properties对象中的key-value对写入a.ini文件中;②代码处则从a.ini文件中读取key-value对,并添加到props2对象中。编译、运行上面程序,该程序输出结果如下:

1
{password=123456, gender=male, username=yeeku}

上面程序还在当前路径下生成了一个a.ini文件,该文件的内容如下:

1
2
3
4
#comment line
#Thu Jul 11 17:42:17 CST 2019
password=123456
username=yeeku

读写XML

Properties可以把key-value对以XML文件的形式保存起来,也可以从XML文件中加载key-value对,相关方法如下。

方法 描述
void loadFromXML(InputStream in) 将指定输入流上的XML文档表示的所有属性加载到此Properties表中。
void storeToXML(OutputStream os, String comment) 把属性表中的键值对保存到到XML文件中
void storeToXML(OutputStream os, String comment, String encoding) 把属性表中的键值对保存到XML文件中,并指定编码
### 实例 ###
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package map.test.properties;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

public class PropertiesXMLTest
{
public static void main(String[] args)
{
Properties props = new Properties();
// 向Properties中增加属性
props.setProperty("username", "yeeku");
props.setProperty("password", "123456");
// 将Properties中的key-value对保存到a.ini文件中
try
{
props.storeToXML(new FileOutputStream("a.xml"), "这是注释");
} catch (FileNotFoundException e1)
{
e1.printStackTrace();
} catch (IOException e1)
{
e1.printStackTrace();
}
// 新建一个Properties对象
Properties props2 = new Properties();
// 向Properties中增加属性
props2.setProperty("gender", "male");
// 将a.ini文件中的key-value对追加到props2中
try
{
props2.loadFromXML(new FileInputStream("a.xml"));
} catch (InvalidPropertiesFormatException e)
{
e.printStackTrace();
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
System.out.println(props2);
}
}

运行效果:

1
{password=123456, gender=male, username=yeeku}

生成XML文件内容如下:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>这是注释</comment>
<entry key="password">123456</entry>
<entry key="username">yeeku</entry>
</properties>

原文链接: 8.6.4 使用Properties读写属性文件