SE高阶(1):用于读写配置文件的特殊Map——Properties类
2017-04-25 22:45
453 查看
Properties类的特点和作用
Properties类表示了一个持久的属性集。
Properties可保存在流中或从流中加载。属性列表以键值对形式存储,key和value都是字符串。
一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。
只要配置文件以key=value的形式来作为属性列表,Properties都可以进行读写。而且现在Properties也支持XML文件了。
使用注意点
Properties类实现了Map接口,可以使用put()来创建属性键值对,但因为允许放入不同类型key-value,尽量少使用,建议使用setProperty()。Properties是属于Map体系,所以Properties输出的属性列表是无序的。
Properties输出属性列表有两种方法:list()和store(),store()方法的Stirng comments参数表示注释。当然也可以自己加注释,#注释语句。
Properties通过流写入文件时,节点流默认对文件内容进行覆盖,根据需求来确定是否允许附加内容。
Properties类方法
Properties方法 | 作用描述 |
---|---|
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 文档所表示的所有属性加载到此属性表中。 |
Object setProperty(String key, String value) | 以键值对形式来设置属性。 |
Enumeration<?> propertyNames() | 返回属性列表中所有键的枚举。 |
Set<String> stringPropertyNames() | 返回此属性列表中的键集。 |
void store(OutputStream out, String comments) | 将该Properties的属性列表(键值对)写入输出流。 |
void store(Writer writer, String comments) | 将Properties的属性列表(键值对)写入输出字符流。 |
void storeToXML(OutputStream os, String comment) | 输出一个包含所有属性的 XML 文档。 |
void storeToXML(OutputStream os, String comment, String encoding) | 使用指定编码输出一个包含所有属性的 XML 文档。 |
Properties类的代码实例
1.两种方式把属性列表写入文件中
使用到的方法:setProperty()、list()和store()[java] view
plain copy
print?
Properties pro = new Properties();
//key-value形式设置属性
pro.setProperty("A", "AAA");
pro.setProperty("G", "GGG");
pro.setProperty("B", "BBB");
pro.setProperty("C", "CCC");
System.out.println(pro);
FileOutputStream fos = new FileOutputStream("F:\\properites.txt");
FileWriter fw = new FileWriter("F:\\properites.txt");
PrintStream ps = new PrintStream(fos);
pro.list(ps);//无注释
pro.store(fw, "comments");//有注释
list()和store()将属性键值对写入文件中,list()使用的是打印流作为参数,可以指定编码,但不能加注释。store()可以加注释,但注释是中文时则是显示Unicode格式。
2.读取配置文件
使用到的方法:load()、stringPropertyNames()[java] view
plain copy
print?
Properties pro = new Properties();
//指向一个属性文件
FileInputStream fis = new FileInputStream("F:\\properites.txt");
//加载属性文件
pro.load(fis);
//返回pro对象中的所有键集
Set<String> proStr = pro.stringPropertyNames();
//读取属性列表
//mode 1
for(String key : proStr) {
System.out.println(key + ":" + pro.getProperty(key));
}
//mode 2
Iterator<String> its = pro.stringPropertyNames().iterator();
while(its.hasNext()) {
String s = its.next();
System.out.println(s + "--" + pro.getProperty(s));
}
使用stringPropertyNames()方法获取属性文件的所有键值,该方法会返回一个泛型声明的集合Set<String>,这样就可以直接使用,无需强制转换String。但除了该方法,如果用entrySet()和keySet()呢?下面给出实例。
3.使用entrySet()和keySet()来遍历属性列表
[java] viewplain copy
print?
//使用entrySet()遍历key-value
Iterator it = pro.entrySet().iterator();
while(it.hasNext()) {
Map.Entry obj = (Map.Entry)it.next();
System.out.println(obj.getKey() + "::" + obj.getValue());
}
//使用keySet()
System.out.println("--------------------------");
Iterator ite = pro.keySet().iterator();
while(ite.hasNext()) {
Object obj = ite.next();
System.out.println(obj + ":" + pro.getProperty((String) obj));
}
//使用values()获取所有valueCollection<Object> values = pro.values();System.out.println(values);
输出结果并不是按照属性文件中的顺序来的,而是无序的,而且这三个方法输出的列表顺序都是一致的。也不知道为什么会这样,所以建议使用stringProperyNames()。
使用Properties来加载JDBC的例子
[java] viewplain copy
print?
private static String username = null;
private static String password = null;
private static String url = null;
static {
String path = JdbcUtils.class.getClassLoader().getResource("db.properties").getPath();
Properties properties = new Properties();
try {
properties.load(new FileInputStream(path));
String driverClass = properties.getProperty("driver");
username = properties.getProperty("username");
password = properties.getProperty("password");
url = properties.getProperty("url");
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
相关文章推荐
- 实现快速读写配置文件的内容,可以用于读取*.exe.config文件或者Web.Config文件的内容,或者可以读取指定文件的配置项.
- C# XML配置文件读写类(用于程序配置保存)
- 用于读写 INI 配置文件的 C++ 类
- C# XML配置文件读写类(用于程序配置保存)
- C# 读写XML文件,用于配置文件
- 一个用于读写配置文件的类
- 在C#中读写INI配置文件
- .net 2.0 中对配置文件的读写
- lionkid2中的配置设置文件,用于安装用
- lionkid2中的配置设置文件,用于皮肤时
- 用API读写INI配置文件
- Web 下配置文件信息的读写
- C#读写配置文件
- 一种简便实效的配置文件读写方法
- Symbian中读写配置文件
- 用java读写ini配置文件的原因以及实现 示例
- Web 下配置文件信息的读写
- 为你的程序/系统提供强大的配置功能(选项配置文件的读写)
- 用java读写ini配置文件(转)
- 读写INI配置文件的Java类