Java快速上手Properties集合类

news2024/11/18 23:29:43

在这里插入图片描述

概念

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我建议大学生看一下阿凡达2,对离校后很有帮助

网上评价阿凡达2说剧情拉胯&#xff0c;但我却通过他的剧情看到了当代大学生的一些影子&#xff0c;尤其是对于离校的毕业生来说&#xff0c;相对吻合的场景还是很多的&#xff0c;让我来分析一下。 目录 阿发达2关键剧情点 1、在校期间 2、终于要离校了 3、离开学校&…

Flutter 安装踩坑记录 HTTP host https://pub.dev/ is not reachable.

Flutter安装踩坑记录安装Flutter SDK参考链接安装Flutter SDK Windows安装 flutter官网下载flutter sdk包 2.解压到C盘除去program file相关的目录&#xff08;最好自己创建一个新的目录&#xff0c;因为放在program file等目录需要特殊的权限&#xff0c;会出现问题&#xf…

【解读】CSA CISO研究报告: 零信任的部署现状及未来展望

零信任理念已经存在了十多年。然而对需要保护IT系统的企业来说&#xff0c;这个术语及其实施方式的关注度显著增加。 国际云安全联盟CSA发布调研报告《CISO研究报告&#xff1a;零信任的部署现状及未来展望》&#xff0c;本次调研的目的是使大家更好地理解组织机构内部的零信任…

【My Electronic Notes系列——放大电路与集成运算放大器】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

电脑怎么录制视频?如何录制页面上指定区域

你知道电脑怎么录制视频吗&#xff1f;有时候我们并不需要录制整个电脑屏幕&#xff0c;只需要对特定区域&#xff0c;这个时候该怎么办呢&#xff1f;其实我们只需要一款既支持全屏录制又支持区域录制的录屏工具&#xff0c;就可以轻松搞定。下面小编教您如何录制电脑上指定的…

azg携手Bubs出席2022未来母婴大会主题专场,探讨母婴品牌长红发展路径

近日&#xff0c;由母婴行业观察主办的“2022第八届未来母婴大会”在上海成功举办&#xff0c;来自行业内的近百位资深嘉宾受邀参与&#xff0c;共襄盛会。而在以“新周期 新机遇&#xff0c;母婴品牌可持续生长路径”的2022未来母婴大会主题专场中&#xff0c;Bubs中国区资深渠…

梦熊杯-十二月月赛-白银组题解-D.智慧

D. Problem D.智慧&#xff08;wisdom.cpp&#xff09; 内存限制&#xff1a;256 MiB 时间限制&#xff1a;1000 ms 标准输入输出 题目类型&#xff1a;传统 评测方式&#xff1a;文本比较 题目描述: 「须弥」是「智慧」的国度。 布耶尔认为&#xff0c;如果能只使用加…

CTFshow--web--红包题第七弹

好家伙&#xff0c;一打开就是个phpinfo&#xff0c;看看了感觉暂时没有什么利用的东西&#xff0c;扫一下目录吧使用dirsearch扫描&#xff0c;发现/.git/index的一个目录文件&#xff0c;访问下载他python dirsearch.py -u "http://98c1d213-ce9d-4415-99b1-2b4f2c80430…

java 探花交友项目day5 推荐好友列表 MongoDB集群 发布动态,查询动态 圈子功能

推荐好友列表 需求分析 推荐好友&#xff1a;分页形式查询推荐的用户列表&#xff0c;根据评分排序显示 代码实现&#xff1a; tanhuaController: /** * 查询分页推荐好友列表 */ GetMapping("/recommendation") public ResponseEntity recommendation(Recomme…

回归模型评价指标原理与基于sklearn的实现

1 前言 回归任务是机器学习中常见的任务&#xff0c;特别是涉及到具体的发电量预测、风力预测等工业任务时&#xff0c;有非常多的应用场景。回归任务不同于分类任务&#xff0c;回归任务的预测值一般是连续的数&#xff0c;分类任务的预测值则是离散的值&#xff08;比如0、1分…

ssh2.js+Shell一套组合拳下来,一年要花2080分钟做的工作竟然节省到52分钟~

前言 进入了新的一年&#xff0c;团队被分配了新的工作内容——每周巡检。 巡检工作简单&#xff0c;但需要人工重复性地登陆远程服务器、输入重复的命令&#xff0c;然后将命令的结果记录下来。每做一次估计花40分钟&#xff0c;但要每周做&#xff0c;一年52周&#xff0c;…

Java---微服务---分布式搜索引擎elasticsearch(3)

分布式搜索引擎elasticsearch&#xff08;3&#xff09;1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现2.自动补全2.1.拼音分…

51单片机学习笔记-15 红外遥控

15 红外遥控 [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 15.1 红外遥控与外部中断 15.1.1 红外遥控器 红外遥控是利用红外光进行通信的设备…

【MyBatis】| MyBatis参数处理(核心知识)

目录 一&#xff1a;MyBatis参数处理 1. 单个简单类型参数 2. Map参数 3. 实体类参数&#xff08;PoJo类&#xff09; 4. 多参数 5. Param注解&#xff08;命名参数&#xff09; 一&#xff1a;MyBatis参数处理 接口中方法的参数专栏&#xff01; 1. 单个简单类型参数 简…

RSA加密算法

RSA算法原理 非对称加密算法&#xff0c;有公钥和私钥之分通过公钥加密的数据必须通过私钥才能解密&#xff0c;反之&#xff0c;私钥加密的数据需要通过公钥解私钥能生成公钥&#xff0c;当公钥不能推导出私钥 欧拉函数 指小于n的正整数中与n互质的数的总个数&#xff08;记…

基于蜣螂算法优化的核极限学习机(KELM)回归预测-附代码

基于蜣螂算法优化的核极限学习机(KELM)回归预测 文章目录基于蜣螂算法优化的核极限学习机(KELM)回归预测1.KELM理论基础2.回归问题数据处理4.基于蜣螂算法优化的KELM5.测试结果6.Matlab代码摘要&#xff1a;本文利用蜣螂算法对核极限学习机(KELM)进行优化&#xff0c;并用于回归…

C 语言零基础入门教程(十九)

C 文件读写 上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。 一个文件&#xff0c;无论它是文本文件还是二进制文件&#xff0c;都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数&#xff0c;也…

激光SLAM闭环方案总结

高质量的闭环是建图必不可少的元素之一。而激光SLAM不像视觉那样可以提供细致的纹理信息&#xff0c;因此常常出现误检和漏检的情况。最近&#xff0c;看了不少关于激光SLAM闭环方法的论文&#xff0c;总结一下。一、构建点云的描述子1、Scan Context&#xff08;2018&#xff…

抗抑郁药如何帮助细菌抵抗抗生素

谷禾健康 迄今为止最全面的全球抗菌素耐药性 (AMR) 研究发现&#xff0c;由耐药菌引起的感染是所有年龄段人群死亡的主要原因之一。 22年发表在《柳叶刀》杂志上的分析估计&#xff0c;2019 年有 495 万人死于细菌性 AMR 发挥作用的疾病。其中&#xff0c;127 万人死亡是 AMR 的…

如何使用matlab对时间序列进行ADF检验?|adftest函数(获取不同显著性下的统计结果)

ADF检验 迪基富勒检验&#xff08;ADF检验&#xff09;是一种常见的统计检验&#xff0c;用于检验给定时间序列是否平稳。在分析序列的平稳性时&#xff0c;它是最常用的统计检验之一。matlab中提供了函数adftest可以完成该检验&#xff0c;本文重点介绍该函数的用法。 Matla…