• Properties操作指南


    一.简介:

      Properties是java中用的比较多的一个类,表示一个持久的属性集。继承于Hashtable,Properties可从流中加载,也可保存在流中。属性列表中每个键极其对应值共同组成一个字符串。也即可以理解为KEY-VALUE的形式。

      很多时候为了提高程序的应用效率,这类Properties文件可以保存在缓存系统中,因此,在操作一些特有数据时可以选择使用Properties。在开发过程中,需要灵活使用。在本博文中将详细介绍该类的使用,以及将Properties文件保存为XML文件和读取XML文件中的KEY值等,由于在本案例中,代码里面使用了详细的注释,因此,为了减少篇幅,仅留下对代码理解有用的信息,所以不再过多的阐述。

      本博文时本人的劳动成果所得,在博客园总结分享,欢迎转载。在没有作者的书面说明的情况下,必须保留本段声明。作者:itRed  邮箱:it_red@sina.com  博客链接:http://www.cnblogs.com/itred  GitHub链接:http://github.com/itred

    二.案例:

    1. 新建项目:

          在本DEMO中,不介绍文件的创建过程,直接采用手动创建。新建一个java项目,并且,在项目目录下新建一个properties文件,用于存放我们即将操作的字符串(可以理解为key-value的键值对字符串)。   

      2. 添加一个key-value字符串:

          主要思路是首先加载这个Properties文件,其中需要注意的是,这个写入进去之后是必须要进行保存的,所以,不仅需要输入流,更需要输出流。这里利用setProperty进行键入key-value值,再利用store进行保存。关键代码如下:

        in = new BufferedInputStream(new FileInputStream(PROPS_PATH));
        props.load(in);
           ou = new BufferedOutputStream(new FileOutputStream(PROPS_PATH));
           props.setProperty(key, value);
           props.store(ou, "INSERT KEY-VALUE :" + key + "=" + value + "***");

      3. 将map中的key-value全部写入Properties中:

        因为Map也是属于Key-Value类型的键值对,所以和Properties可以进行近似的理解。要实现将map中的所有值写入到Properties文件中,其实主要思路与上面是一样的,只是在写入时需要遍历Map中的所有Key值和Value值。关键代码如下:

        in = new BufferedInputStream(new FileInputStream(PROPS_PATH));
           props.load(in);
           os = new BufferedOutputStream(new FileOutputStream(PROPS_PATH));
           for (Map.Entry<String, String> entry : map.entrySet()) {
                 props.setProperty(entry.getKey(), entry.getValue());
           }
            props.store(os, "Insert all map");

      4. 遍历Properties中的所有Key值和value值:

        直接将其以流的形式加载到内存中,直接进行获取所有值。其实,实现这个遍历的方法还有很多,本例使用实现后的关键代码如下:

        in = new BufferedInputStream(new FileInputStream(PROPS_PATH));
           props.load(in);
           Enumeration enu = props.propertyNames();
           props.list(System.out);
           while (enu.hasMoreElements()) {
              System.out.println("(KEY)" + enu.nextElement() + "=(VALUE)"
                         + props.getProperty((String) enu.nextElement()));
            }

      5. 通过key值获取map值:

          因为和map差不多都是存放key-value形式的键值对字符串,因此很自然想到只取该文件中某个key的value值。仅仅需要props.getProperty(key)便可完成。

      6. 将该Properties文件中的key-value保存为xml文件:

        实现的思路是直接调用Properties类中的一个方法storeToXml()就可以顺利完成。关键代码如下:

        in = new BufferedInputStream(new FileInputStream(PROPS_PATH));
           props.load(in);
           ou = new BufferedOutputStream(new FileOutputStream(new File(
                      "D:/test.xml")));
           props.storeToXML(ou, "测试");

      7. 从xml中获取key的value值:

          以流的形式加载xml文件,然后通过方法loadFromXML()读入到properties,再通过getProperty()进行取值。

        Properties props = new Properties();
           String XML_PATH = "D:/test.xml";
           InputStream in = null;
           try {
               in = new BufferedInputStream(
                      new FileInputStream(new File(XML_PATH)));
               props.loadFromXML(in);
               String value = props.getProperty(key);
               return value;
           } catch (Exception e) {
               e.printStackTrace();
           return "";
        }

    三.总结:

        其实Properties的使用是很简单的,但是对于从未使用过这个类的朋友而言,真心不知该从何下手。对此,本人也是深有体会。与其用一个方法查询一个方法,倒还不如一次性对该Properties文件中的方法进行一个全面的了解,这样,在以后的日子里,用起来也得心应手,十分方便。

        本案例是本人的学习总结,代码实现仅作功能性测试使用,不可用于生产过程,因为,不断的进行流文件的加载的打开,在本例中未进行及时的关闭操作。所以,如果需要应用于实际生产中,需要在finally中,及时的关闭Properties文件。

        另附本案例中所涉及到的案例源码请点击链接

     作者:itRed
      博客:http://itred.cnblogs.com
    GitHub:
    https://github.com/itRed 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段说明,
    且在文章明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    hdu6393 Traffic Network in Numazu 树链剖分
    codeforces 1180E Serge and Dining Room 线段树
    codeforces 546E Soldier and Traveling 网络流
    E
    poj3207 Ikki's Story IV
    【2020牛客多校第二场】F Fake Maxpooling
    【2020牛客多校第一场】J Easy Integration
    【ICPC2015沈阳M】Meeting
    【 AtCoder Beginner Contest 169】C Multiplication 3
    【AtCoder Beginner Contest 169】B Multiplication 2
  • 原文地址:https://www.cnblogs.com/itred/p/4743523.html
Copyright © 2020-2023  润新知