浅谈Java中Properties类的详细使用

 更新时间:2021年06月25日 11:21:16   作者:两个蝴蝶飞  
properties类继承自hashtable,通常和io流结合使用。它最突出的特点是将key/value作为配置属性写入到配置文件中以实现配置持久化,或从配置文件中读取这些属性。它的这些配置文件的规范后缀名为".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)

主要方法:

1. 构造方法

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

二、打印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

3.1、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 被截取了。

在这里插入图片描述

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

在这里插入图片描述

3.3、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文件

5.1、普通写入,中文时乱码

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

在这里插入图片描述

5.2、解决乱码写入的问题

在构建输入流和输出流时,指定编码格式, 编码的格式相同。 如均是 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配置文件

6.1、导出到.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为属性, 后面跟值来进行输入。
可按照这种形式,继续添加。

6.2、导出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();
    }
}

在这里插入图片描述

以上就是浅谈Java中Properties类的详细使用的详细内容,更多关于Java Properties的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot中邮件任务的使用

    SpringBoot中邮件任务的使用

    这篇文章主要介绍了SpringBoot中邮件任务的使用,SpringBoot 邮件任务是指使用SpringBoot框架来实现邮件发送和接收的功能,通过SpringBoot的自动配置和简化的开发流程,我们可以轻松地集成邮件功能到我们的应用程序中,需要的朋友可以参考下
    2023-10-10
  • 关于JWT之token令牌认证登录

    关于JWT之token令牌认证登录

    这篇文章主要介绍了关于JWT之token令牌认证登录,使用JWT能够保证Token的安全性,且能够进行Token时效性的检验,使用JWT时,登录成功后将用户信息生成一串令牌字符串,需要的朋友可以参考下
    2023-05-05
  • Springboot通过配置WebMvcConfig处理Cors非同源访问跨域问题

    Springboot通过配置WebMvcConfig处理Cors非同源访问跨域问题

    这篇文章主要介绍了Springboot通过配置WebMvcConfig处理Cors非同源访问跨域问题,关于Cors跨域的问题,前端有代理和jsonp的常用方式解决这种非同源的访问拒绝策略
    2023-04-04
  • java eclipse 整个项目或包查找只定字符串并替换操作

    java eclipse 整个项目或包查找只定字符串并替换操作

    这篇文章主要介绍了java eclipse 整个项目或包查找只定字符串并替换操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java获得一个数组的指定长度排列组合算法示例

    Java获得一个数组的指定长度排列组合算法示例

    这篇文章主要介绍了Java获得一个数组的指定长度排列组合算法,结合实例形式分析了java排列组合相关数组遍历、运算操作技巧,需要的朋友可以参考下
    2019-06-06
  • SpringBoot+mail 轻松实现各类邮件自动推送

    SpringBoot+mail 轻松实现各类邮件自动推送

    在实际的项目开发过程中,经常需要用到邮件通知功能,例如,通过邮箱注册,邮箱找回密码,邮箱推送报表等等,实际的应用场景非常的多,今天通过这篇文章,我们一起来学习如何在 Spring Boot 中快速实现一个自动发送邮件的功能
    2024-07-07
  • Spring 静态变量/构造函数注入失败的解决方案

    Spring 静态变量/构造函数注入失败的解决方案

    我们经常会遇到一下问题:Spring对静态变量的注入为空、在构造函数中使用Spring容器中的Bean对象,得到的结果为空。不要担心,本文将为大家介绍如何解决这些问题,跟随小编来看看吧
    2021-11-11
  • Java EE项目中的异常处理总结(一篇不得不看的文章)

    Java EE项目中的异常处理总结(一篇不得不看的文章)

    什么是异常?运行时发生的可被捕获和处理的错误。这篇文章主要介绍了Java EE项目中的异常处理总结,有需要的可以了解一下。
    2016-11-11
  • 使用ServletUtil.write方法下载接口文件中文乱码问题解决

    使用ServletUtil.write方法下载接口文件中文乱码问题解决

    本文主要介绍了使用ServletUtil.write方法下载接口文件中文乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • java并发编程专题(五)----详解(JUC)ReentrantLock

    java并发编程专题(五)----详解(JUC)ReentrantLock

    这篇文章主要介绍了java(JUC)ReentrantLock的的相关资料,文中讲解非常详细,实例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论