Properties 类的详细使用(十三)

简介: Properties 类的详细使用(十三)

一.Properties 类


Properties 类位于 java.util.Properties ,是Java 语言的配置文件所使用的类, Xxx.properties 为Java 语言常见的配置文件,如数据库的配置 jdbc.properties, 系统参数配置 system.properties。 这里,讲解一下Properties 类的具体使用。


以key=value 的 键值对的形式进行存储值。 key值不能重复。


20190625191851138.png


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


主要方法:


20190626193351419.png


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


二. 打印 JVM 参数


JVM 中可以获取Properties, 来打印输出 JVM 所了解的属性值。


用list() 方法,打印到控制台。


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


常见的有:


20190626193605204.png


三.打印自定义.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 被截取了。


20190626193847808.png


三.二 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();
    }
  }


20190626194053701.png


三.三 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();
    }
  }


20190626194248611.png


四. 获取值 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 值,如果没有该值,则输出设置的默认值。


2019062619450883.png


五. 写入到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();
    }
  }


20190626194729157.png


五.二 解决乱码写入的问题


在构建输入流和输出流时,指定编码格式, 编码的格式相同。 如均是 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();
    }
  }


测试运行之后:


20190626194906462.png


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


六 . 加载和导出到 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();
    }
  }


测试结果为:


20190626195131626.png


用 <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();
    }
  }


20190626195302224.png


这就是Properties 类的常见用法 。


谢谢!!!

相关文章
|
10月前
properties加载的几种方式
properties加载的几种方式
|
1天前
|
Java
Properties类的使用
本文介绍了Java中Properties类的使用,它继承自Hashtable,用于处理属性文件。Properties对象可以保存键值对,并且能够从输入流加载或保存到输出流。文章展示了如何读取和写入properties文件,包括使用`setProperty`和`getProperty`方法来设置和获取属性值,以及使用`list`方法打印属性到控制台。同时,还解释了Properties类底层使用的哈希表结构,并提到了字符编码转换问题,特别是在处理中文时会转换成unicode编码。
|
24天前
|
存储 设计模式 编译器
C++(十三) 类的扩展
本文详细介绍了C++中类的各种扩展特性,包括类成员存储、`sizeof`操作符的应用、类成员函数的存储方式及其背后的`this`指针机制。此外,还探讨了`const`修饰符在成员变量和函数中的作用,以及如何通过`static`关键字实现类中的资源共享。文章还介绍了单例模式的设计思路,并讨论了指向类成员(数据成员和函数成员)的指针的使用方法。最后,还讲解了指向静态成员的指针的相关概念和应用示例。通过这些内容,帮助读者更好地理解和掌握C++面向对象编程的核心概念和技术细节。
|
XML Java 数据格式
看技术总监如何带你了解:Spring Bean的定义包含哪些内容?
昨天,有几位同学就私信我,说老师能不能发一期关于Spring Bean定义的详细介绍,今天我就来满足大家的要求。关于Spring Bean的定义我一共分为三部分来介绍,首先,介绍Spring Bean声明式配置内容;然后,介绍BeanDefinition与配置文件的关系;最后,介绍Spring如何解析配置文件?
66 3
|
4月前
|
XML Java 数据格式
Java中的Properties类详解Properties配置文件
Java中的Properties类详解Properties配置文件
76 0
|
XML 存储 安全
一文带你全面了解Properties类
一文带你全面了解Properties类
153 0
一文带你全面了解Properties类
|
Java 测试技术 Apache
实战小技巧16:Properties配置文件自动装载JavaBean
SpringBoot的配置自动装载,使用起来还是很舒爽的,可以非常简单的将properties配置文件的内容,填充到Java bean对象中,如果我们现在是一个脱离于Springboot框架的项目,想实现上面这个功能,可以怎么来做呢?
351 0
|
Java Spring
Spring源代码研究之how is Bean object created
Created by Wang, Jerry, last modified on Jul 08, 2016
Spring源代码研究之how is Bean object created
|
存储 Java
JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习
JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习 我们继续学习File 一.文件递归 我们可以来实现一个文件管理器,简单的,但是在此之前,我们先来做点小案例 package com.
1261 0