8.6.4 使用Properties读写属性文件 Properties
类是Hashtable
类的子类,正如它的名字所暗示的,该对象在处理属性文件 时特别方便( Windows
操作平台上的.ini
文件就是一种属性文件)。
Properties功能 Properties
类可以把Map
对象和属性文件关联起来 ,从而可以把Map
对象中的key-value
对写入属性文件中,也可以把属性文件中的”属性名=属性值
“加载到Map
对象中 。
key和value都是String 由于属性文件里的属性名、属性值只能是字符串
类型 ,所以Properties
里的key
、vaue
都是字符串类型。所以Properties
相当于一个key
、value
都是String
类型的Map
Properties类方法 获取属性值
方法
描述
String getProperty(String key)
获取Properties
中指定属性名对应的属性值,类似于Map
的get(Object key)
方法。
String getProperty(String key, String defaultValue)
该方法与前一个方法基本相似。该方法多一个功能,如果Properties
中不存在指定的key
时,则该方法返回第二个参数作为默认值。
设置属性值
方法
描述
Object setProperty(String key, String value)
设置属性值,类似于Hashtable
的put()
方法。
读取属性文件
方法
描述
void load(InputStream inStream)
从属性文件(以输入流表示)中加载key-value
对,把加载到的key-value
对追加到Properties
里(Properties
是 Hashtable
的子类,它不保证key-value
对之间的次序)。
void load(Reader reader)
Reads a property list (key and element pairs) from the input character stream in a simple line-oriented format.
写入属性文件
方法
描述
void store(OutputStream out, String comments)
将Properties
中的key-value
对输出到指定的属性文件(以输出流表示)中。
void store(Writer writer, String comments)
Writes this property list (key and element pairs) in this Properties table to the output character stream in a format suitable for using the load(Reader) method.
实例 Properties读写文件 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 (); props.setProperty("username" , "yeeku" ); props.setProperty("password" , "123456" ); props.store(new FileOutputStream ("a.ini" ) , "comment line" ); Properties props2 = new Properties (); props2.setProperty("gender" , "male" ); 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
对,相关方法如下。
读取XML
方法
描述
void loadFromXML(InputStream in)
将指定输入流上的XML
文档表示的所有属性加载到此Properties
表中。
写入XML
方法
描述
void storeToXML(OutputStream os, String comment)
把属性表中的键值对保存到到XML
文件中
void storeToXML(OutputStream os, String comment, String encoding)
把属性表中的键值对保存到XML
文件中,并指定编码
void storeToXML(OutputStream os, String comment, Charset charset)
Emits an XML document representing all of the properties contained in this table, using the specified encoding.
实例 Properties读写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 (); props.setProperty("username" , "yeeku" ); props.setProperty("password" , "123456" ); try { props.storeToXML(new FileOutputStream ("a.xml" ), "这是注释" ); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } Properties props2 = new Properties (); props2.setProperty("gender" , "male" ); 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 >