• 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文件则没有那么多要求。

    PS: 我存在过,我遇见过,我失败过。 有些路,明明有坑却从没人放警示牌。有些事,明明是错的却没人去管。有些话,明明应该告诉后来人却没人去说。 既然没人做,那就我来吧。希望我曾经历过的挫折不再重现于后来人。希望传承能够不是只挂在嘴边。希望人模人样的“人”能够真正做人。
  • 相关阅读:
    python pop()
    二年为限,看到自己的改变
    Android layout布局属性、标签属性总结大全
    js判断PC端和移动端
    JS简易模拟滚动条
    (响应式PC端媒体查询)电脑屏幕分辨率尺寸大全
    手机尺寸和平板电脑的屏幕分辨率
    【整理笔记】手机端html页面制作需要了解的东西集合
    JS获取浏览器版本号及获取IE版本提示并关闭
    CSS DIV垂直居中
  • 原文地址:https://www.cnblogs.com/FlameRen/p/2959586.html
Copyright © 2020-2023  润新知