一、简介
<1> java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式。
<2> 在properties文件中,可以用"#"来作注释。
二、Java的Properties类
属性映射(property map):是一种存储键/值对的数据结构。属性映射经常被用来存放配置信息。
它有三个特性:
1、键和值斗志字符串
2、键/值对可以很容易地写入文件或从文件读出。
3、用二级表存放默认值
实现属性映射的Java类被称为Properties(Java.util.Properties),此类是Java中比较重要的类,主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。
此类是线程安全的:多个线程可以共享单个 Properties 对象而无需进行外部同步。
三、主要的方法:
1. getProperty ( String key):用指定的键在此属性列表中搜索属性。也就是通过参数 key ,得到 key 所对应的 value。
2. load ( InputStream inStream):从输入流中读取属性列表(键和元素对)。通过对指定的文件(比如说上面的 test.properties 文件)进行装载来获取该文件中的所有键 - 值对。以供 getProperty ( String key) 来搜索。
3. setProperty ( String key, String value) :调用 Hashtable 的方法 put 。他通过调用基类的put方法来设置 键 - 值对。
4. store ( OutputStream out, String comments):以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。与 load 方法相反,该方法将键 - 值对写入到指定的文件中去。
5. clear ():清除所有装载的 键 - 值对。该方法在基类中提供。
因为 Properties 继承于 Hashtable,所以可对== Properties 对象应用 put 和 putAll 方法==。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。相反,应该使用 setProperty 方法。
如果在“不安全”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。
类似地,如果在“不安全”的 Properties 对象(即包含非 String 的键)上调用 propertyNames 或 list 方法,则该调用将失败。
在试图获得字符串值时制定默认值。(当键值不存在的时候,就会自动时用它)
String title=settings.getProperty("title","Default title");
四、demo
public static void main(String[] args) throws Exception {
Properties pro = new Properties();
pro.load(new FileInputStream("src/resources/conf.properties"));
// 获取key为userid的value
String userid = pro.getProperty("userid");
// 设置key-values
pro.setProperty("userAge","20");
// 把设置的key-value保存到本地,其中comments是注释,也会保存到配置文件中第一行。
pro.store(new FileOutputStream("src/resources/conf.properties"),"1234");
// enumeration:列举事实,逐条陈述,祥叙
/*源码
public Enumeration<?> propertyNames() {
Hashtable<String,Object> h = new Hashtable<>();
enumerate(h);
return h.keys();
}
*/
Enumeration<?> enumeration = pro.propertyNames();
while (enumeration.hasMoreElements()){
Object o = enumeration.nextElement();
System.out.println(o);
String val = pro.getProperty(o.toString());
System.out.println("-------------------");
System.out.println(o + " "+val);
}
// 清空配置 调用clear函数就可以。
}