【Java 基础篇】Properties 结合集合类的使用详解

Java 中的 Properties 类是一个常见的用于管理配置信息的工具,它可以被看作是一种键值对的集合。虽然 Properties 通常用于处理配置文件,但它实际上也可以作为通用的 Map 集合来使用。在本文中,我们将详细探讨如何使用 Properties 作为 Map 集合,以及它的一些常见用法。
什么是 Properties?
Properties 是 Java 核心库中的一个类,它继承自 Hashtable,主要用于管理键值对形式的配置信息。这些键值对被存储在一个 .properties 文件中,通常采用以下格式:
key1=value1
key2=value2
key3=value3
在配置文件中,键名和对应的值之间用等号(或冒号)分隔。每个键值对通常表示一个配置项。
Properties 作为 Map 集合的基本用法
创建 Properties 对象
首先,让我们看看如何创建和初始化一个 Properties 对象作为 Map 集合使用:
Properties properties = new Properties();
添加键值对
可以使用 setProperty 方法添加键值对,就像操作普通的 Map 一样:
properties.setProperty("name", "John");
properties.setProperty("age", "30");
获取值
要获取某个键的值,可以使用 getProperty 方法:
String name = properties.getProperty("name");
String age = properties.getProperty("age");
遍历键值对
可以使用 entrySet 方法遍历 Properties 中的所有键值对:
for (Map.Entry<Object, Object> entry : properties.entrySet()) {String key = (String) entry.getKey();String value = (String) entry.getValue();System.out.println(key + ": " + value);
}
移除键值对
如果需要移除某个键值对,可以使用 remove 方法:
properties.remove("age");
Properties 的高级用法
从文件加载配置
Properties 还可以从外部配置文件加载配置信息。假设有一个名为 config.properties 的配置文件:
db.url=jdbc:mysql://localhost:3306/mydb
db.username=admin
db.password=secret
您可以使用以下方式加载配置信息:
try (FileInputStream fileInputStream = new FileInputStream("config.properties")) {properties.load(fileInputStream);
} catch (IOException e) {e.printStackTrace();
}
将 Properties 写入文件
您还可以将 Properties 对象中的配置信息写入到文件中:
try (FileOutputStream fileOutputStream = new FileOutputStream("config.properties")) {properties.store(fileOutputStream, "Database Configuration");
} catch (IOException e) {e.printStackTrace();
}
默认值
Properties 允许您为配置项设置默认值。如果某个配置项不存在,将返回默认值:
String dbUrl = properties.getProperty("db.url", "jdbc:mysql://localhost:3306/defaultdb");
使用 Properties 默认值
Java 提供了一个便捷的方法来获取系统级配置,该配置是 Properties 的默认值。您可以使用 System.getProperties() 来获取系统级配置,并将其视为 Properties 对象:
Properties systemProperties = System.getProperties();
String javaVersion = systemProperties.getProperty("java.version");
Properties 作为通用的 Map 集合
尽管 Properties 主要用于配置文件,但它实际上是一个通用的 Map 集合,因此也可以用于其他用途。以下是一些示例用法:
存储和检索自定义对象
您可以使用 Properties 存储和检索自定义对象。需要将自定义对象序列化为字符串,然后存储它们:
Person person = new Person("Alice", 25);
String serializedPerson = serializePerson(person);
properties.setProperty("person", serializedPerson);
然后,您可以获取并反序列化该对象:
String serializedPerson = properties.getProperty("person");
Person person = deserializePerson(serializedPerson);
用于缓存
Properties 可以用作简单的缓存,将数据存储在内存中以提高访问速度:
// 存储数据到缓存
properties.setProperty("cacheKey", "cachedValue");// 从缓存中获取数据
String cachedValue = properties.getProperty("cacheKey");
用于国际化
在国际化应用程序中,Properties 可用于存储本地化资源的键值对:
properties.setProperty("welcome.message", "Welcome to our application!");
properties.setProperty("error.message", "An error occurred.");
然后,根据用户的本地化设置,可以获取相应的消息。
实例总结
创建 Properties 对象
要使用 Properties,首先需要创建一个 Properties 对象,然后加载配置文件。下面是创建 Properties 对象并加载配置文件的示例:
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;public class ConfigLoader {public static Properties loadConfig(String filePath) {Properties properties = new Properties();try {FileInputStream fileInputStream = new FileInputStream(filePath);properties.load(fileInputStream);fileInputStream.close();} catch (IOException e) {e.printStackTrace();}return properties;}
}
读取配置项
一旦配置文件加载到 Properties 对象中,您可以使用 getProperty 方法来获取特定配置项的值。例如:
Properties config = ConfigLoader.loadConfig("app.properties");
String dbUrl = config.getProperty("db.url");
String dbUser = config.getProperty("db.username");
String dbPassword = config.getProperty("db.password");
修改配置项
要修改配置项的值,可以使用 setProperty 方法。例如:
config.setProperty("app.title", "My Awesome App");
config.setProperty("app.version", "1.0");
保存配置
修改配置后,您可以使用 store 方法将更改后的配置保存回文件。例如:
try {FileOutputStream fileOutputStream = new FileOutputStream("app.properties");config.store(fileOutputStream, "Updated App Configuration");fileOutputStream.close();
} catch (IOException e) {e.printStackTrace();
}
使用 Properties 存储列表
假设您需要配置一个邮件服务器的多个 SMTP 地址。可以使用逗号分隔的字符串将它们存储在 Properties 中:
config.setProperty("mail.smtp.servers", "smtp1.example.com,smtp2.example.com,smtp3.example.com");
然后,您可以使用 split 方法将它们拆分为列表:
String smtpServers = config.getProperty("mail.smtp.servers");
List<String> smtpServerList = Arrays.asList(smtpServers.split(","));
使用 Properties 存储映射
如果您需要配置键值对的映射,也可以使用 Properties 来存储它们。例如,您可以配置数据库连接池的参数:
config.setProperty("db.connection.pool.size", "10");
config.setProperty("db.connection.timeout", "30000");
然后,您可以使用 getProperty 方法将它们提取到映射中:
int connectionPoolSize = Integer.parseInt(config.getProperty("db.connection.pool.size"));
int connectionTimeout = Integer.parseInt(config.getProperty("db.connection.timeout"));Map<String, Integer> dbConfig = new HashMap<>();
dbConfig.put("connectionPoolSize", connectionPoolSize);
dbConfig.put("connectionTimeout", connectionTimeout);
使用 Properties 存储自定义对象
有时,配置数据可能更复杂,需要存储
自定义对象。在这种情况下,您可以将对象序列化为字符串,然后存储在 Properties 中。例如,假设您需要配置一个用户对象:
User user = new User("john.doe", "John Doe", 30);
String serializedUser = serializeUser(user);
config.setProperty("user.data", serializedUser);
然后,您可以使用 getProperty 方法获取字符串,并将其反序列化为对象:
String serializedUser = config.getProperty("user.data");
User user = deserializeUser(serializedUser);
总结
Properties 是 Java 中处理配置文件的强大工具,它易于使用且适用于许多应用程序。通过结合使用 Properties 和集合类,您可以更灵活地管理和操作配置数据,以满足各种不同的需求。不过,在处理更复杂的配置数据时,请确保数据的一致性和安全性,以及适当的异常处理,以提高应用程序的稳定性和可维护性。
希望本文对您理解如何使用 Properties 和集合类来管理配置文件有所帮助。
相关文章:
【Java 基础篇】Properties 结合集合类的使用详解
Java 中的 Properties 类是一个常见的用于管理配置信息的工具,它可以被看作是一种键值对的集合。虽然 Properties 通常用于处理配置文件,但它实际上也可以作为通用的 Map 集合来使用。在本文中,我们将详细探讨如何使用 Properties 作为 Map 集…...
数字孪生体标准编程
数字孪生体标准 括ISO TC184/SC4正在制定数字孪生制造标准ISO 23247、ISO/IEC JTC1/AG11正在推动数字孪生体标准、IEEE P2806正在做有关“数字表达”的标准。赢家通吃的标准战 卡尔夏皮罗和哈尔范里安撰写了《信息规则:网络经济战略指南》(Information R…...
力扣 -- 394. 字符串解码
解题方法: 参考代码: class Solution{ public:string decodeString(string s){stack<string> sst;stack<int> dst;//防止字符串栈为空的时候再追加字符串到栈顶元素sst.push("");int n s.size();int i 0;while(i<n)//最好不…...
面试官:什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路
🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、什么是虚拟DOM 二、为什么需要虚拟DOM 三、如何实现虚拟DOM 小结 一、什么是虚拟DOM 虚拟 DOM (…...
Ubuntu安装中文拼音输入法
ubuntu安装中文拼音输入法 ubuntu版本为23.04 1、安装中文语言包 首先安装中文输入法必须要让系统支持中文语言,可以在 Language Support 中安装中文语言包。 添加或删除语音选项,添加中文简体,然后会有Applying changes的对话框&#x…...
高端知识竞赛中用到的软件和硬件有哪些
现在单位搞知识竞赛,已不满足于用PPT放题,找几个简单的抢答器、计分牌弄一下了,而是对现场效果和科技感要求更高了。大屏要分主屏侧屏,显示内容要求丰富炫酷;选手和评委也要用到平板等设备;计分要大气些&am…...
Vue 3.3 发布
本文为翻译 原文地址:宣布推出 Vue 3.3 |The Vue Point (vuejs.org) 今天我们很高兴地宣布 Vue 3.3 “Rurouni Kenshin” 的发布! 此版本侧重于开发人员体验改进 - 特别是 TypeScript 的 SFC <script setup> 使用。结合 Vue Language Tools&…...
算法|图论 3
LeetCode 130- 被围绕的区域 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目描述:给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域…...
【数据结构】二叉树的层序遍历(四)
目录 一,层序遍历概念 二,层序遍历的实现 1,层序遍历的实现思路 2,创建队列 Queue.h Queue.c 3,创建二叉树 BTree.h BTree.c 4,层序遍历的实现 一,层序遍历概念 层序遍历:除了先序…...
macOS文件差异比较最佳工具:Beyond Compare 4
Beyond Compare for mac是一款Scooter Software研发的文件同步对比工具。你可以选择针对多字节的文本、文件夹、源代码,甚至是支持比对adobe文件、pdf文件或是整个驱动器,检查其文件大小、名称、日期等信息。你也可以选择使用Beyond Compare合并两个不同…...
Windows+Pycharm 如何创建虚拟环境
当我们开发一个别人的项目的时候,因为项目里有很多特有的包,比如 Pyqt5.我们不想破坏电脑上原来的包版本,这个时候,新建一个虚拟环境,专门针对这个项目就很有必要了. 简略步骤: 1.新建虚拟环境 1.打开 pycharm 终端(Terminal)安装虚拟环境工具: pip install virtualenv2.创…...
vant 按需导入 vue2
vant 按需导入 vue2 1、通过npm安装 # Vue 3 项目,安装最新版 Vant: npm i vant -S# Vue 2 项目,安装 Vant 2: npm i vantlatest-v2 -S2、自动按需引入组件 babel-plugin-import 是一款 babel 插件,它会在编译过程中…...
Java手写分治算法和分治算法应用拓展案例
Java手写分治算法和分治算法应用拓展案例 1. 算法思维导图 以下是用Mermanid代码表示的分治算法的实现原理: #mermaid-svg-nvJwIm97kPHEXQOR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nvJwIm97kP…...
学习 CodeWhisperer 的一些总结
目前一些常见的的 AI 工具 GitHub Copilot:GitHub 与 OpenAI 合作开发的一个人工智能助手。 Codeium:是一个免费的人工智能驱动的代码生成工具 Tabnine:一个自动代码生成工具,免费版本非常有限,只提供简短的代码完成…...
JavaScript 中的 `this` 指向问题与其在加密中的应用
JS中的 this 关键字是一个非常重要的概念,它在不同情况下会指向不同的对象或值。在本文中,我们将深入探讨 JavaScript 中 this 的各种情况,并思考如何将其应用于 JS加密中的一些有趣用途。 1. 全局上下文中的 this 在全局上下文中ÿ…...
深入理解算法的时间复杂度
文章目录 时间复杂度的定义时间复杂度的分类时间复杂度分析常见数据结构和算法的时间复杂度常见数据结构常见算法 常见排序算法说明冒泡排序(Bubble Sort)快速排序(Quick Sort)归并排序(Merge Sort)堆排序(Heap Sort) 时间复杂度的定义 时间复杂度就是一种用来描述算法在输入规…...
2023年度教育部人文社会科学研究一般项目评审结果,已公布!
【SciencePub学术】 9月15日,教育部社科司公示了2023年度教育部人文社会科学研究一般项目评审结果,共3482项。 其中,规划基金、青年基金、自筹经费项目共3029项通过专家评审;西部和边疆地区项目200项,新疆项目20项&a…...
十一、MySql的事务(上)
文章目录 一、引入(一)CURD不加控制,会有什么问题?(二)CURD满足什么属性,能解决上述问题? 二、什么是事务?三、事务的特性(一)原子性:…...
时间序列分析1--生成和导出时间序列数据
时间序列数据的生成 直接录入 1.行录入 ts.(price,startc(2015,1),frequency 12) # price为时间序列变量,start为起始读入时间 frequncy指定每年读入的数据的频率,frequncy4为季度数据、frequncy52为星期数据 2.列录入 scan() 1:101 ....6:7 7:…...
HarmonyOS应用开发—资源分类与访问
应用开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同的设备或配置中的表…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
