Java在util包下提供了一个Properties类来操作Properties资源文件:
public class Properties extends Hashtable<Object, Object>
它继承了Hashtable<Object, Object> 是 Dictionary<K,V>的间接子类。
同时,它实现了Serializable, Cloneable, Map<Object, Object> 接口。
直接的子类是Provider
Properties类表示属性的持久化,在程序中的属性通常是暂时存在的。如果我们需要让属性长久存在,那么就需要把属性存入数据库或者文件当中,Properties类用来将属性存入properties文件当中,以持久化。
Properties可保存在流中或者从流当中加载,属性列表中每一个键值都是字符串。
它实现了Map接口,当然也可以使用put等方法,但是不建议使用put,因为该方法允许其值是非字符形,所以为了值的安全,我们建议使用setProperty方法,这样在编译期就可以检查值是否正确。
如果是xml文件格式来存储properties属性,那么需要声明
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
例如:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <entry key="age">40</entry> <entry key="name">lay</entry> </properties>
API详见:
方法摘要 | |
---|---|
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) 方法或 storeToXML(OutputStream os, String comment) 方法来进行。 |
Object |
setProperty(String key, String value) 调用 Hashtable 的方法 put 。 |
void |
store(OutputStream out, String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。 |
void |
store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。 |
void |
storeToXML(OutputStream os, String comment) 发出一个表示此表中包含的所有属性的 XML 文档。 |
void |
storeToXML(OutputStream os, String comment, String encoding) 使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。 |
Set<String> |
stringPropertyNames() 返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。 |
// 个别方法使用样例
public class test { public static void main(String[] args) { InputStream inputStream = null; // 从xml中读取 inputStream = test.class.getResourceAsStream("/fileXml.xml"); Properties user = new Properties(); try { user.loadFromXML(inputStream); user.setProperty("age", "40"); System.out.println(user.getProperty("name")); System.out.println(user.getProperty("age")); // 获取项目路径 String path = test.class.getResource("/").getPath(); System.out.println(path); // 输出为xml, 默认为 utf-8 user.storeToXML(new FileOutputStream(path + "/file.xml"), "评论内容"); user.list(System.out); } catch (IOException e) { e.printStackTrace(); } } }