Java定义了Java.util.Properties类用于properties文件的操作。Properties类继承了HashTable类。
1、加载properties文件内容
1、从输入流中加载:
方法:
synchronized void load(InputStream inStream):从输入流中加载文件的内容,加载到Properties实例中。
输入流的来源:
1)使用类加载器获取Resource目录中或者指定目录中文件的流:
InputStream in = getClass().getResourceAsStream("fileName.properties");
如果输入相对路径,类加载器会直接从resource目录中去查找文件。
2)或者直接使用IO:
InputStream in = new BufferedInputStream(new FileInputStream(fileName));
这里使用了缓冲流加快IO速率,也可以不使用外层的缓冲了,直接用内层的FileInputStream。
2、从Reader中加载:
方法:
synchronized void load(Reader reader):从Reader中加载文件的内容。
字符输入流Reader的来源:
Reader reader = new FileReader("fileName.properties");
2、内存中的属性列表(Properties的实例中)的增删改查:
0、重要属性:
protected Properties defaults:默认属性列表是在构造器中传入的Properties实例,用来当在属性列表中找不到key值的时候从默认属性列表中获取缺省值。
官方介绍:A property list that contains default values for any keys not found in this property list.
1、属性的增加和修改:
synchronized Object setProperty(String key, String value):如果Properties实例中已经包含这个key,那么就更新;如果不包含,就添加。
2、属性的查询:
String getProperty(String key):查询key对应的value,如果没有则从默认属性列表defaults中查询,仍然没有则返回null。
String getProperty(String key, String defaultValue):查询key对应的value,如果没有则从默认属性列表defaults中查询,仍然没有则返回defaultValue。
3、属性的删除:
synchronized V remove(Object key):方法用来从属性列表中删除key对应的属性。严格来说,这不是Properties中定义的方法,而是在它的继承链中,由Map定义了抽象方法、由HashTable实现的方法,在Properties中并未复写该方法。
synchronized void clear():清空所有键值对。严格来说,这不是Properties中定义的方法,而是在它的继承链中,由Map定义了抽象方法、由HashTable实现的方法,在Properties中并未复写该方法。
4、属性的key值集合:
Set<String> stringPropertyNames():返回属性列表的key值的String集合,包括默认属性列表defaults中主属性列表中没有的key值。忽略key或者value非String类型属性。
Enumeration<?> propertyNames():返回属性列表的key值的枚举集合,包括默认属性列表defaults中的key值。
3、存储到文件
void store(Writer writer, String comments):将属性列表及描述comments加载到Writer中,comments是以注释的形式存储的。
void store(OutputStream out, String comments):将属性列表及描述comments加载到输出流中,comments是以注释的形式存储的。
void storeToXML(OutputStream os, String comment):将属性列表转换为XML的格式,并和描述comment一起存储到输出流。
void storeToXML(OutputStream os, String comment, String encoding):将属性列表转换为XML的格式,并和描述comment一起使用指定的编码方式存储到输出流。