• Properties 类的详细使用


    一.Properties 类
    Properties 类位于 java.util.Properties ,是Java 语言的配置文件所使用的类, Xxx.properties 为Java 语言常见的配置文件,如数据库的配置 jdbc.properties, 系统参数配置 system.properties。 这里,讲解一下Properties 类的具体使用。
    以key=value 的 键值对的形式进行存储值。 key值不能重复。


    继承了Hashtable 类,以Map 的形式进行放置值, put(key,value) get(key)

    主要方法:

    这里只讲解一些常用的形式。

    二. 打印 JVM 参数
    JVM 中可以获取Properties, 来打印输出 JVM 所了解的属性值。
    用list() 方法,打印到控制台。

    @Test
    public void printTest(){
    Properties properties=System.getProperties();
    properties.list(System.out);
    }

    常见的有:


    三.打印自定义.properties 文件中的值
    在src 目录下,放置 jdbc.properties 文件,是数据库的配置文件。

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
    jdbc.username=root
    jdbc.password=abc123

    三.一 list 输出到控制台 用绝对路径加载
    @Test
    public void name1Test(){
    try{
    Properties properties=new Properties();
    //用的是磁盘符的绝对路径
    InputStream input=new BufferedInputStream(new FileInputStream("D:\workspace\JavaLearn\src\jdbc.properties"));
    properties.load(input);
    properties.list(System.out);
    }catch(Exception e){
    e.printStackTrace();
    }
    }

    url 被截取了。


    三.二 propertyNames 输出 getClass() 加载
    @Test
    public void name2Test(){
    try{
    Properties properties=new Properties(); // 用/文件名, / 表示根目录
    InputStream input=PropertiesTest.class.getClass().getResourceAsStream("/jdbc.properties");
    properties.load(input);
    Enumeration<String> names=(Enumeration<String>) properties.propertyNames();
    while(names.hasMoreElements()){
    //这是key值
    String key=names.nextElement();
    String value=properties.getProperty(key);
    System.out.println(key+"="+value);
    }
    }catch(Exception e){
    e.printStackTrace();
    }
    }


    三.三 stringPropertyNames 输出 getClassLoader 加载 (推荐)
    @Test
    public void name3Test(){
    try{
    Properties properties=new Properties();
    //直接写src 类路径下的文件名
    InputStream input=PropertiesTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    properties.load(input);

    //把key值转换成set 的形式,遍历set
    Set<String> names=properties.stringPropertyNames();
    Iterator<String> iterator=names.iterator();
    while(iterator.hasNext()){
    String key=iterator.next();
    String value=properties.getProperty(key);
    System.out.println(key+"="+value);
    }

    }catch(Exception e){
    e.printStackTrace();
    }
    }


    四. 获取值 getProperties
    @Test
    public void name3Test(){
    try{
    Properties properties=new Properties();
    InputStream input=PropertiesTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    properties.load(input);
    //String value=properties.getProperty("jdbc.url");
    String value=properties.getProperty("jdbc.url1","没有该key值");
    System.out.println("输出值:"+value);

    }catch(Exception e){
    e.printStackTrace();
    }
    }

    输出时,getProperty() 有当前的key值,则输出Key值对应的value 值。
    如果没有key值,则输出 null 值。
    后面可以跟 default 值,如果没有该值,则输出设置的默认值。


    五. 写入到Properties 文件
    五.一 普通写入,中文时乱码
    @Test
    public void writeTest(){
    try{
    Properties properties=new Properties();
    InputStream input=PropertiesTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    properties.load(input);

    //多添加几个值。
    properties.setProperty("name","两个蝴蝶飞");
    properties.setProperty("sex","男");

    //properties.put("name","两个蝴蝶飞"); 可以用继承Hashtable 的put 方法写入值
    // properties.put("sex","男");

    //将添加的值,连同以前的值一起写入 新的属性文件里面。
    OutputStream out=new FileOutputStream("D:\jdbc.properties");
    properties.store(out,"填充数据");

    }catch(Exception e){
    e.printStackTrace();
    }
    }

    五.二 解决乱码写入的问题
    在构建输入流和输出流时,指定编码格式, 编码的格式相同。 如均是 utf-8的形式。

    @Test
    public void write2Test(){
    try{
    Properties properties=new Properties();
    //用绝对路径
    InputStream input=new BufferedInputStream(new FileInputStream("D:\workspace\JavaLearn\src\jdbc.properties"));
    properties.load(new InputStreamReader(input,"utf-8"));
    //多添加几个值。
    properties.setProperty("name","两个蝴蝶飞");
    properties.setProperty("sex","男");

    OutputStream output=new FileOutputStream("D:\jdbc.properties");
    OutputStreamWriter out=new OutputStreamWriter(output,"utf-8");
    properties.store(out,"填充数据");

    }catch(Exception e){
    e.printStackTrace();
    }
    }

    测试运行之后:

    这样便解决了乱码的问题。

    六 . 加载和导出到 xml 配置文件
    六.一 导出到 .xml 配置文件 storeToXML
    将Properties 类中定义的属性,导出成 .xml 的形式.

    @Test
    public void xmlWriteTest(){
    try{
    //处理成编码样式。
    Properties properties=new Properties();

    //多添加几个值。
    properties.setProperty("name","两个蝴蝶飞");
    properties.setProperty("sex","男");
    OutputStream output=new FileOutputStream("D:\jdbc.xml");
    //编码设置成utf-8的形式。
    properties.storeToXML(output,"填充到xml","utf-8");

    }catch(Exception e){
    e.printStackTrace();
    }
    }


    测试结果为:

    用 <entry> 节点 key为属性, 后面跟值来进行输入。
    可按照这种形式,继续添加。

    六.二 导出XML 配置文件 loadFromXML
    @Test
    public void xmlReadTest(){
    try{
    Properties properties=new Properties();
    InputStream input=new BufferedInputStream(new FileInputStream("D:\jdbc.xml"));
    properties.loadFromXML(input);
    properties.list(System.out);

    }catch(Exception e){
    e.printStackTrace();
    }
    }


    这就是Properties 类的常见用法 。

    谢谢!!!
    ————————————————
    版权声明:本文为CSDN博主「两个蝴蝶飞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/yjltx1234csdn/article/details/93769032

  • 相关阅读:
    五、生产者消费者模型_ThreadLocal
    四、多线程基础-线程池的创建和使用
    spring根据beanName获取bean
    spring容器的功能扩展
    机甲大师S1机器人编程学习,Windows 10 安装Scratch和简单实例学习
    如何建设高可用系统
    详解Condition的await和signal等待/通知机制
    从源码角度彻底理解ReentrantLock(重入锁)
    MySQL 分库分表及其平滑扩容方案
    机甲大师S1机器人编程学习
  • 原文地址:https://www.cnblogs.com/obsession-with-the-young-monk/p/15213045.html
Copyright © 2020-2023  润新知