Java集合——8.使用Properties
Java中Properties类:配置文件操作
在开发Java应用程序时,配置文件是存储程序参数的常用方式,Java集合框架提供了Properties类专门用于处理这种键值对形式的配置文件。
Properties类的本质
Properties类虽然本质上是Hashtable的子类(历史遗留设计),但它专为处理字符串类型的键值对(String-String)设计。其特点包括:
- 专注于配置文件的读写,提供了便捷的
getProperty()和setProperty()方法 - 支持从多种输入流(文件、classpath资源、内存流等)加载配置
- 可以将修改后的配置写入文件,保留注释信息
- 兼容
.properties文件格式(以key=value为行,#开头为注释)
读取配置文件的步骤
使用Properties读取配置文件通常分为三步:
1. 创建Properties实例
Properties props = new Properties();
2. 加载配置文件
Properties提供了load()方法加载配置,支持多种输入源:
从文件系统加载:
// 读取本地文件系统中的配置文件
props.load(new FileInputStream("config/setting.properties"));
从classpath加载:
// 读取项目资源目录中的配置文件(适合打包在jar中的默认配置)
props.load(getClass().getResourceAsStream("/default.properties"));
从内存流加载:
// 从字符串生成的字节流中读取配置
String configStr = "app.name=MyApp\nversion=1.0";
ByteArrayInputStream in = new ByteArrayInputStream(configStr.getBytes(StandardCharsets.UTF_8));
props.load(in);
3. 获取配置值
使用getProperty()方法获取配置,可指定默认值(当键不存在时返回):
// 获取配置,不存在则返回null
String lastFile = props.getProperty("last_open_file");
// 获取配置,不存在则返回默认值120
int interval = Integer.parseInt(props.getProperty("auto_save_interval", "120"));
写入配置文件
当需要保存修改后的配置时,使用store()方法将Properties实例中的键值对写入文件:
Properties props = new Properties();
// 设置配置项
props.setProperty("url", "https://example.com");
props.setProperty("timeout", "3000");
// 写入文件,第二个参数为注释
try (FileOutputStream out = new FileOutputStream("config/user.properties")) {
props.store(out, "User configuration updated at " + new Date());
} catch (IOException e) {
e.printStackTrace();
}
写入的文件会自动保留key=value格式,注释行会以#开头。
处理编码问题
早期Java版本中,.properties文件默认使用ASCII编码(ISO8859-1),中文需要转义为\uXXXX形式。JDK9及以上版本支持UTF-8编码,但需注意:
读取UTF-8编码的配置文件时,应使用
load(Reader)方法(字符流)而非load(InputStream)(字节流):// 正确读取UTF-8编码的配置文件
props.load(new FileReader("config/chinese.properties", StandardCharsets.UTF_8));
写入包含中文的配置时,
store()方法默认会对非ASCII字符转义,若需保留UTF-8明文,可使用第三方库或自定义处理。
注意事项
优先使用专用方法:始终使用
getProperty()和setProperty()方法,避免调用从Hashtable继承的get()、put()等方法(这些方法支持非字符串类型,可能破坏配置的一致性)。分层配置策略:将默认配置放在classpath中,再通过外部配置文件覆盖部分参数,实现灵活的环境适配:
// 加载默认配置
props.load(getClass().getResourceAsStream("/default.properties"));
// 加载外部配置覆盖默认值
props.load(new FileInputStream("conf/custom.properties"));
资源关闭:使用try-with-resources语法确保输入输出流正确关闭,避免资源泄漏。
Java集合——8.使用Properties的更多相关文章
- Java集合之Properties
Java集合之Properties
- -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器
集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别? A:长度区别 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- Java集合面试题
1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1 ...
- Java集合框架(常用类) JCF
Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...
- 【JAVA集合框架之Map】
一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
- JAVA集合迭代遍历和特性介绍
数组.集合:都是一种容器,用一个对象管理多个对象:数组不能自动增长:只能存放同类型的元素 集合能自动扩容:部分集合允许存放不同类型的元素: 1.List: 有顺序的,允许存放重复的元素: 遍历:for ...
- Java集合框架使用总结
Java集合框架使用总结 前言:本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看JavaAPI文档. 一.概述数据结 ...
- [转] java集合详解
结合框架体系应该最重要的是如何灵活利用三种接口,set,map,list,他们如何遍历,各有什么特征,怎么样去处理,这是关键,在这个基础上再去掌握在什么场合用什么类型的接口.比如说list和set,s ...
- 40个Java集合面试问题和答案
Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点.这里,我列出了一些关于Java集合的重要问题和答案. 另外,码农网之前也整理过一篇关于Java集合面试题的文章:大公司最 ...
随机推荐
- 乌班图20.04上安装java配置tomcat9
原文参考:https://blog.csdn.net/u010763324/article/details/122678528 Apache Tomcat是一个开源的 Web 服务器和 Java se ...
- manim边做边学--隐函数图像
在数学可视化中,显函数$ y=f(x) \(相对容易处理,但**隐函数**\) F(x,y)=0 $的绘制则更具挑战性. Manim库中的ImplicitFunction类专门用于解决这个问题,它能够 ...
- VSCode安装配置C++环境教程
前言 IDE--集成开发环境,用于提供程序开发环境,集成了代码编写.分析.编译和调试等一体化的的套件.如C++的Visual Studio.Java的IDEA和Python的PyCharm等.IDE部 ...
- 记一次 .NET 某SaaS版CRM系统 崩溃分析
一:背景 1. 讲故事 调试训练营里的一位学员前些天找到我,说他们跑在k8s中的程序崩掉了不知道怎么回事?日志也没有记录到,让我帮他看看,dump也抓到了,既然抓到了那就看看吧. 二:程序为什么会崩溃 ...
- 支付宝小程序textarea字数统计踩坑
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是发布多端的项目,所以主推的是uni-ap ...
- 你应该懂的AI大模型(十)之 LLamaFactory 之 LoRA微调Llama3
本文标题中说的微调 Llama3指的是局部微调,使用 LLamaFactory 局部微调 LIama3. 一.什么是LLamaFactory LLaMA-Factory 是一个开源的大型语言模型微调框 ...
- 解决了AI聊天的10个痛点后,我又做了一个新功能:交叉分析表
前言 不久前,我写了一篇长文,吐槽了当前 Web 和桌面端 AI 聊天工具的 10 个体验问题.从"找不到几周前绝妙点子"的全局检索缺失,到"置顶所有等于没置顶" ...
- 统计Excel单元格中某个字符出现的次数
具体目标:统计A列单元格"/"出现的次数. 方法:先计算A2单元格中字符个数,然后将"/"替换为空再次计算字符个数,最后两者相减. Substitute函数 S ...
- 洛谷 P1044 [NOIP2003 普及组] 栈 题解
洛谷 P1044 [NOIP2003 普及组] 栈 题解 Sol 本题通过分析可得: 假设现在进行 \(12\) 次操作,我们把 push 认为是在地图上向右走,pop 向上走,那么其中一个合法的步骤 ...
- Win11系统中如何连接打印机的问题
说到打印机是很多电脑基地用户在办公时都经常需要使用的设备,而且现在很多家庭里面有小孩上学以后都需要打印机来打印作业,但是普通的打印机需要和电脑连接才能使用.很多小伙伴升级win11系统之后,就不知道该 ...