• 【Java-----Properties类详解】


    Properties类概述

    Properties是Java中一个比较重要的类,主要用于读取Java的配置文件。各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”或者“键 值”的格式,文本注释信息可以用“#”来注释。

    在做Java项目开发过程中,涉及到一些数据库服务连接配置,缓存服务器连接配置等,通常情况下我们会将这些不太变动的配置信息存储在以.properties结尾的配置文件中。当对应的服务器地址或账号密码信息有所变动时,我们只需要修改一下配置文件中的信息即可。

    Properties类特点

    Properties是一个Map体系集合类,因为其继承于Hashtable,而Hashtable继承于Dictionary类,实现了Map接口,所以Properties也保留了其相关特性。

    • Properties是Hashtable的子类
    • Properties类表示了一个可持久的属性集
    • Properties可以保存在流中或从流中加载
    • Properties中每个键和对应的值都是一个字符串(String类型)
    • Properties有一个特殊的作用:专门用来加载xxx.properties配置文件

    常用方法

    Properties作为Map集合使用

    Properties作为Map集合使用时各种方法都与map集合一致(虽然可以,但是不建议将Properties作为Map集合使用),但是有一点不同,就是在创建对象时不需要也不能给出范型,否则会报错,默认所有的键值对类型都是Object类型。示例代码如下:

    1. Properties pro=new Properties();//不需要加泛型
    2. pro.put("001", "张三");//添加数据时建议使用Properties特有的方法,不建议使用该方法
    3. pro.put("002", "李四");
    4. pro.put("003", "王五");
    5. for(Object key:pro.keySet()) {
    6. System.out.println(key+":"+pro.get(key));
    7. }
    8. /*输出:001:张三
    9. 002:李四
    10. 003:王五
    11. */

    注意:不要使用Hashtable里面定义的方法添加键值对!因为他们可以插入不是String类型的数据,如果一个Properties中含有非String的键值对,那么这样的Properties是不安全的,调用store或者save方法将失败

    Properties作为集合的特有方法

    Object setProperties(String key,String value):设置集合的键和值,都是String类型,底层调用Hashtable方法put

    1. Properties pro=new Properties();
    2. pro.setProperty("001", "张三");
    3. pro.setProperty("002", "李四");
    4. pro.setProperty("003", "王五");

    String getProperties(String key):搜索指定的键对应的值

    1. Properties pro=new Properties();
    2. pro.setProperty("001", "张三");
    3. pro.setProperty("002", "李四");
    4. pro.setProperty("003", "王五");
    5. System.out.println(pro.getProperty("001"));
    6. System.out.println(pro.getProperty("011"));//不存在时返回null
    7. /*输出:张三
    8. null
    9. */

    Set stringPropertyNames():从该属性列表中返回一个不可修改的键集,就是返回一个不可修改的键的集合,键是字符串

    1. Properties pro=new Properties();
    2. pro.setProperty("001", "张三");
    3. pro.setProperty("002", "李四");
    4. pro.setProperty("003", "王五");
    5. Set s=pro.stringPropertyNames();
    6. System.out.println(s);
    7. //输出:[001, 002, 003]

    Properties和IO流结合使用

    1  利用IO流将数据存入文件

    void store(OutputStream os,String comments):将此属性列表(键值对)写入Properties表中,以适合于使用load(InputStream)方法的格式写入输出字节流

    1. Properties pro=new Properties();
    2. pro.setProperty("001", "abc");
    3. pro.setProperty("002", "efg");
    4. pro.setProperty("003", "xyz");
    5. FileOutputStream fos1=new FileOutputStream("D:\\aaa\\properties.txt");
    6. pro.store(fos1, null);//不想添加描述信息就另第二个参数为null

    文件中内容为:

    void store(Writer writer,String comments):将此属性列表(键值对)写入Properties表中,以适合于使用load(Reader)方法的格式写入输出字符流

    1. Properties pro=new Properties();
    2. pro.setProperty("001", "张三");
    3. pro.setProperty("002", "李四");
    4. pro.setProperty("003", "王五");
    5. FileWriter fw=new FileWriter("D:\\aaa\\properties.txt");
    6. pro.store(fw, null);

    文件中内容为:

     void storeToXML(OutputStream os,String comment,String encoding):使用指定的编码方式表示此表中包含的所有属性的XML文档

    void storeToXML(OutputStream os,String comment):使用默认的编码方式表示此表中包含的所有属性的XML文档

    1. Properties pro=new Properties();
    2. pro.setProperty("001", "张三");
    3. pro.setProperty("002", "李四");
    4. pro.setProperty("003", "王五");
    5. FileOutputStream fos=new FileOutputStream("D:\\aaa\\propertiesXML.XML");
    6. pro.storeToXML(fos, null);

    文件中内容为:

     2  利用IO流将文件数据加载到集合

    方法说明
    void load(InputStream inStream)以字节输入流读取属性列表(键和元素对)
    void load(Reader reader)以字符输入流读取属性列表(键和元素对)
    void list(PrintStream out)将此属性列表打印到字节输出流,此方法对于调试很有用
    void list(PrintWriter out)将此属性列表打印到字符输出流,此方法对于调试很有用

    示例代码如下:

    1. Properties pro=new Properties();
    2. pro.setProperty("001", "张三");
    3. pro.setProperty("002", "李四");
    4. pro.setProperty("003", "王五");
    5. FileWriter fw=new FileWriter("D:\\aaa\\properties.txt");
    6. pro.store(fw, null);
    7. FileReader fr=new FileReader("D:\\aaa\\properties.txt");
    8. pro.load(fr);
    9. pro.list(System.out);
    10. /*输出:-- listing properties --
    11. 001=张三
    12. 002=李四
    13. 003=王五
    14. */

    void loadFromXML(InputStream in):从XML文档中读取数据

    1. Properties pro=new Properties();
    2. pro.setProperty("001", "张三");
    3. pro.setProperty("002", "李四");
    4. pro.setProperty("003", "王五");
    5. FileOutputStream fos2=new FileOutputStream("D:\\aaa\\propertiesXML.XML");
    6. pro.storeToXML(fos2, null);
    7. FileInputStream fis=new FileInputStream("D:\\aaa\\propertiesXML.XML");
    8. pro.loadFromXML(fis);
    9. pro.list(System.out);
    10. /*输出:-- listing properties --
    11. 001=张三
    12. 002=李四
    13. 003=王五
    14. */

  • 相关阅读:
    muduo源码剖析之Timer定时器
    基于nginx在视频播放器与服务器之间反向代理流程
    java 特点了解及 JDK 初谈(程序员必看!)
    Java面向对象编程
    怎样用PHP语言实现远程控制三路开关
    LabVIEW通信-CAN
    ISO26262功能安全概述
    4.Flink实时项目之日志数据拆分
    母婴类目电商平台数据分析
    undo log
  • 原文地址:https://blog.csdn.net/qq_45071131/article/details/127656807