Java知识积累——Properties类的使用示例

最近一直在研究properties配置文件,突然碰到了一个java的类,名为Properties。该类继承自HashTable,提供的方法很像Map的实现类HashMap。一时间激发了我对此类的关注和研究,通过找资料和自行调试,发现该类能够在程序运行初期给我们提供帮助。通过解析前置文件(含程序需要的某些参数),获得程序运行所需的配置信息,存入Properties类中,供程序调用。

Properties类的作用就像其名字所体现的一样,主要是解决属性问题的,说白了就是此类和配置文件的关系十分暧昧。现将Properties类的常见使用场景概括如下:

1.从properties配置文件中读取数据,解析key-value对,存入Properties类中。

2.从xml配置问价那种读取数据,解析key-value对,存入Properties类中。

3.将Properties类中存储的key-value对,输出到properties配置文件中。

4.将Properties类中存储的key-value对,输出到xml配置文件中。

见面四个函数分别对应了这四种情况:

 1 //读取properties文件的配置信息到Properties类中

 2 public void readPropFile(){

 3     Properties prop = new Properties();

 4     Enumeration<String> en = null;

 5     String key = null;

 6     

 7     InputStream input = null;

 8     try {

 9         input = this.getClass().getClassLoader().getResourceAsStream("test.properties");

10         prop.load(input);

11         en = (Enumeration<String>) prop.propertyNames();

12         //prop.list(System.out);

13         while(en.hasMoreElements()){

14             key = en.nextElement();

15             System.out.println(key+"---"+prop.getProperty(key));

16         }

17     } catch (Exception e) {

18         e.printStackTrace();

19     } finally{

20         try {

21             input.close();

22         } catch (Exception e2) {

23             e2.printStackTrace();

24         }

25     }

26 }

27 

28 //读取xml文件的配置信息到Properties类中

29 public void readXmlFile(){

30     Properties prop = new Properties();

31     Enumeration<String> en = null;

32     String key = null;

33     

34     InputStream input = null;

35     try {

36         input = this.getClass().getClassLoader().getResourceAsStream("test.xml");

37         prop.loadFromXML(input);

38         en = (Enumeration<String>) prop.propertyNames();

39         //prop.list(System.out);

40         while(en.hasMoreElements()){

41             key = en.nextElement();

42             System.out.println(key+"---"+prop.getProperty(key));

43         }

44     } catch (Exception e) {

45         e.printStackTrace();

46     } finally{

47         try {

48             input.close();

49         } catch (Exception e2) {

50             e2.printStackTrace();

51         }

52     }

53 }

54 

55 //将Properties类中的key-value对,存到properties文件中

56 public void printProp(){

57     Properties prop = new Properties();

58     prop.setProperty("content1", "there is no problem");

59     prop.setProperty("content2", "hello world");

60     

61     //PrintWriter outputFile = null;

62     FileOutputStream outputFile = null;

63     try {

64         //outputFile = new PrintWriter(new File("src/target.properties"));

65         outputFile = new FileOutputStream("src/target.properties");

66         prop.store(outputFile, "test target file");

67     } catch (Exception e) {

68         e.printStackTrace();

69     } finally{

70         try {

71             outputFile.close();

72         } catch (Exception e2) {

73             e2.printStackTrace();

74         }

75     }

76 }

77 

78 //将Properties类中的key-value对,存到xml文件中

79 public void printXML(){

80     Properties prop = new Properties();

81     prop.setProperty("content1", "there is no problem");

82     prop.setProperty("content2", "hello world");

83     

84     //PrintWriter outputFile = null;

85     FileOutputStream outputFile = null;

86     try {

87         //outputFile = new PrintWriter(new File("src/target.properties"));

88         outputFile = new FileOutputStream("src/target.xml");

89         prop.storeToXML(outputFile, "test target xml file");

90     } catch (Exception e) {

91         e.printStackTrace();

92     } finally{

93         try {

94             outputFile.close();

95         } catch (Exception e2) {

96             e2.printStackTrace();

97         }

98     }

99 }

输出到文件可使用Properties类的list方法,也可使用store方法。

输出后的内容如下

properties文件

#test target file

#Thu Mar 14 15:59:01 CST 2013

content2=hello world

content1=there is no problem

xml文件

1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>

2 <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

3 <properties>

4 <comment>test target xml file</comment>

5 <entry key="content2">hello world</entry>

6 <entry key="content1">there is no problem</entry>

7 </properties>

需要强调的是,对于xml文件的读取,仅支持如上代码所示的格式,此格式为properties.dtd中规定的。其他规则的xml配置将不能被正确识别且会抛出异常。而对于properties文件则没有那么多要求。

你可能感兴趣的:(properties)