快速上手Java中的Properties集合类

 更新时间:2023年02月06日 11:57:56   作者:墨辰JC  
java.util.Properties集合继承于Hashtable,来表示一个持久的属性集,他使用键值结构存储数据,每个键及其对应的值都是一个字符串,该类被许多java类使用,下面这篇文章主要给大家介绍了关于如何快速上手Java中Properties集合类的相关资料,需要的朋友可以参考下

概念

Java中的Properties文件是一种配置文件,主要用于表达配置信息,格式是文本文件。该类主要用于读取Java的配置文件,也可以对properties文件进行修改

属性配置:以“键=值”的方式书写一个属性的配置信息
注 释:在properties文件中,可以用“#”来注释

为什么需要Properties类?

将一些固定修改的内容放到Properties文件,如果我们将这些内容放到程序里面(比如:账号、密码),假如说这些内容需要改变,意味着需要对源程序进行修改(修改源码);当再次运行的时候,需要进行重新编译或运行在第三方(当程序工程量大的时候,会浪费大量资源,灵活性差)

Properties类可以很轻松的理解和修改它们

传统的方法(不使用Properties类)

split方法是String类中,用于分割字符串,将分割的字符串变成字符串数组

test.Properties文件的内容

ip=192.168.1.100
user=root
pwd=123456

读取test.properties文件,并获取相应的ip user pwd

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Properties01 {
    public static void main(String[] args) {       
        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new FileReader("src\\test.properties"));
            String line = "";
            while ((line = bufferedReader.readLine()) !=null){
                String[] split = line.split("=");
                System.out.println(split[0]+"值是:"+split[1]);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

控制台输出如下:
ip值是:192.168.1.100
user值是:root
pwd值是:123456

传统方法解决并不是很方便,需要遍历循环,如果要获取文件中指定的某个内容,这时候需要用到Properties类

Properties

Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。

  • 专门用于读取配置文件的集合类

配置文件格式:

键=值

  • 键=值键值对不需要由空格,值不需要用引号括起来,默认类型是String

该类提供了两个构造器

常见Properties调用方法

  • load:加载配置文件的键值对到Properties对象

  • list:将数据显示到指定设备

  • getProperties(key):根据键获取值
  • setProperties(key,value):设置键值对到Properties对象
  • store:将Properties中的键值对存储到配置文件中(如果已存在则覆盖),在IDEA编译器中,保存信息到配置文件,如果含有中文,会存储Unicode编码格式

编码查询工具网站

更多具体方法可在JDK文档或百度进行查看

示例

1.演示使用Properties类读取test.properties文件的内容

import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

public class Properties02 {
    public static void main(String[] args) {
        //创建Properties对象
        Properties properties = new Properties();
        //加载指定的配置文件
        try {
            properties.load(new FileReader("src\\test.properties"));
            //把键值对显示到控制台
            properties.list(System.out);
            System.out.println("===根据键获取对应的值===");
            System.out.println(properties.getProperty("ip"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

– listing properties –
user=root
pwd=123456
ip=192.168.1.100
=根据键获取对应的值=
192.168.1.100

2.使用Properties类添加键值对到文件test.properties中

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class Properties03 {
    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.setProperty("charset", "UTF-8");
        properties.setProperty("user", "jack");
        properties.setProperty("pwd", "123456");
        try {
            properties.store(new FileWriter("src\\test.properties"), null);
            //第二个参数,表示注释信息(null表示没有注释)
            System.out.println("保存配置文件成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

此时test.properties文件的内容为
#Tue Jan 17 18:31:36 CST 2023
user=jack
pwd=123456
charset=UTF-8
注意:如果保存的内容是中文,则存放的格式是Unicode编码

3.完成对test.properties文件的读取,并修改某个键值对

注意:使用setProperty方法,如果key不存在则创建,反之存在,则修改

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class Properties04 {
    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.setProperty("charset", "UTF-8");
        properties.setProperty("user", "jack");
        properties.setProperty("pwd", "123456");

        properties.setProperty("user", "tom");
        properties.setProperty("pwd", "888888");
        try {
            properties.store(new FileWriter("src\\test.properties"), null);
            System.out.println("保存配置文件成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

此时文件内容为:
#Tue Jan 17 18:45:04 CST 2023
user=tom
pwd=888888
charset=UTF-8

setProperty操作时底层源码(父类Hashtable中的方法,可忽略)

public synchronized V put(K key, V value) {
    // Make sure the value is not null
    if (value == null) {
        throw new NullPointerException();
    }

    // Makes sure the key is not already in the hashtable.
    Entry<?,?> tab[] = table;
    int hash = key.hashCode();
    int index = (hash & 0x7FFFFFFF) % tab.length;
    @SuppressWarnings("unchecked")
    Entry<K,V> entry = (Entry<K,V>)tab[index];
    for(; entry != null ; entry = entry.next) {
        if ((entry.hash == hash) && entry.key.equals(key)) {
            V old = entry.value;
            entry.value = value;
            return old;
        }
    }

    addEntry(hash, key, value, index);
    return null;
}

总结

到此这篇关于Java中Properties集合类的文章就介绍到这了,更多相关Java Properties集合类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring IOC创建对象的两种方式

    Spring IOC创建对象的两种方式

    这篇文章主要给大家介绍了关于Spring IOC创建对象的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Quartz高可用定时任务的快速上手指南

    Quartz高可用定时任务的快速上手指南

    Quartz的分布式策略就是一种以数据库作为边界资源的并发策略,每个节点都遵守相同的操作规范,使得对数据库的操作可以串行执行,而不同名称的调度器又可以互不影响的并行运行,下面这篇文章主要介绍了Quartz高可用定时任务快速上手的相关资料,需要的朋友可以参考下
    2022-04-04
  • java中对Redis的缓存进行操作的示例代码

    java中对Redis的缓存进行操作的示例代码

    本篇文章主要介绍了java中对Redis的缓存进行操作的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • java 使用foreach遍历集合元素的实例

    java 使用foreach遍历集合元素的实例

    这篇文章主要介绍了java 使用foreach遍历集合元素的实例的相关资料,这里提供实例帮助大家理解如何使用foreach 进行遍历,希望能帮助到大家,
    2017-08-08
  • @SpringBootConfiguration重复加载报错问题解决

    @SpringBootConfiguration重复加载报错问题解决

    @SpringBootApplication 注解的 exclude 属性用于排除特定的自动配置类,而不是用于排除主配置类本身,因此,不能通过 exclude 属性来排除主配置类的加载,这篇文章主要介绍了@SpringBootConfiguration重复加载报错,需要的朋友可以参考下
    2024-08-08
  • java多线程编程之慎重使用volatile关键字

    java多线程编程之慎重使用volatile关键字

    volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,下面看一下为什么要慎重使用volatile关键字
    2014-01-01
  • SpringBoot封装响应数据实现过程详解

    SpringBoot封装响应数据实现过程详解

    这篇文章主要介绍了SpringBoot封装响应数据实现过程,SpringBoot响应数据封装是指在SpringBoot应用程序中,将返回的数据进行封装,以便于前端页面或其他客户端使用,感兴趣想要详细了解可以参考下文
    2023-05-05
  • IntelliJ IDEA 2023.1.4 无法刷新Maven项目模块的问题及解决方法

    IntelliJ IDEA 2023.1.4 无法刷新Maven项目模块的问题及解决方法

    这篇文章主要介绍了如何排查 IDEA 自身报错问题,本文以IntelliJ IDEA 2023.1.4无法刷新项目Maven模块的问题为例,给大家详细讲解,需要的朋友可以参考下
    2023-08-08
  • idea中git如何修改commit(ChangeList的使用)

    idea中git如何修改commit(ChangeList的使用)

    这篇文章主要介绍了idea中git如何修改commit(ChangeList的使用),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • IntelliJ安装并使用Rust IDE插件

    IntelliJ安装并使用Rust IDE插件

    这篇文章主要介绍了IntelliJ安装并使用Rust IDE插件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论