[Java基础] Properties类的基本操作和介绍
引言
Java中的.properties文件是一种配置文件,主要用于表达配置信息;通俗来说,存放的数据就像是Map中的key和value的对应关系一样;这样就可以通过键值对来对属性进行匹配,并且属性列表中每个键及其对应值都是一个字符串(String类型);
在Java中存在一个Properties类可以用来保存属性集,它可以从流中加载属性集;所以接下来我将会详细介绍一下如何使用Properties类以及其中的常用的方法;
Properties类和和常用方法基本介绍
Properties:
中文:
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。英文:
The Properties class represents a persistent set of properties. The Properties can be saved to a stream or loaded from a stream. Each key and its corresponding value in the property list is a string.
A property list can contain another property list as its “defaults”; this second property list is searched if the property key is not found in the original property list.
这里简单列举几个常用的方法,接下来的操作我也将会用到这些方法;
1,String getProperty(String key)
简介:通过key获取value
2,void load(InputStream inStream/Reader reader)
简介:将文件内容读入内存
3,Object setProperty(String key, String value)
简介:设置(增加)新的键值对
4,void store(OutputStream out / Writer writer, String comments)
简介:将内存中对应内容写入文件
这几个方法是比较常用的,当然还有几个方法没有写,如果需要可以在API文档中查询;
接下来我将会用代码实现一些操作,在这里先把.properties文件放出来:
下面的代码操作都是基于这个文件;
读取操作
读取操作可以通过load方法读取文件,再通过getProperty获取value值;
下面我用一个代码示范:
package io;import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;// 实现对.properties 文件的读取
public class PropertiesBlog01 {// 读入.properties文件public void readProperties() throws IOException {Properties properties = new Properties();// 把文件的数据读入内存properties.load(new FileInputStream("blogtest.properties"));// 输出文件的内容System.out.println(properties.getProperty("name")); // 获取姓名System.out.println(properties.getProperty("age")); // 获取年龄System.out.println(properties.getProperty("gender")); // 获取性别}// main方法调用测试public static void main(String[] args) throws IOException {PropertiesBlog01 propertiesBlog01 = new PropertiesBlog01();propertiesBlog01.readProperties();}
}
输出结果:
jack
18
man
写入操作
写入操作就有点意思了,这里写入分为三种情况:
- 写入新数据覆盖之前的数据
- 写入新数据不会覆盖之前的数据,但是如果有重复键值不会覆盖
- 写入新数据不会覆盖之前的数据,且有重复的键值会覆盖
这三种情况一般按需求使用,但是我感觉最常用的还是第三种(只是个人观点);
下面我用代码示范一下,代码中已有详细注释;
package io;import java.io.*;
import java.util.Properties;// 实现对.properties 文件的写入
public class PropertiesBlog02 {// 写入.properties 文件public void writeProperties() throws IOException {Properties properties = new Properties();// 下面是三种写入情况// 1,写入新数据覆盖之前的数据// 设置文件增添内容properties.setProperty("IdNum", "123456789");properties.store(new FileOutputStream("blogtest.properties"), "this is a comment");// 输出结果:// 原文件内容: 写入新数据覆盖后为:// name=jack #this is a comment// age=18 #Fri Nov 19 19:58:08 CST 2021// gender=man IdNum=123456789// 2,写入新数据不会覆盖之前的数据,但是如果有重复键值不会覆盖// 设置文件增添内容properties.setProperty("IdNum", "repeat");properties.store(new FileOutputStream("blogtest.properties", true), "this is a comment");// 输出结果:// 原文件内容: 写入新数据后为:// #this is a comment #this is a comment// #Fri Nov 19 19:58:08 CST 2021 #Fri Nov 19 20:06:03 CST 2021// IdNum=123456789 IdNum=123456789// #this is a comment// #Fri Nov 19 20:06:03 CST 2021// IdNum=repeat// 3,写入新数据不会覆盖之前的数据,且有重复的键值会覆盖properties.load(new FileInputStream("blogtest.properties"));properties.setProperty("IdNum", "newIdNum");properties.store(new FileOutputStream("blogtest.properties"), "this is a comment");// 输出结果:// 原文件内容: 写入新数据后为:// #this is a comment #this is a comment// #Fri Nov 19 20:06:03 CST 2021 #Fri Nov 19 20:13:22 CST 2021// IdNum=123456789 IdNum=newIdNum// #this is a comment// #Fri Nov 19 20:06:03 CST 2021// IdNum=repeat}public static void main(String[] args) throws IOException {PropertiesBlog02 propertiesBlog02 = new PropertiesBlog02();propertiesBlog02.writeProperties();}
}
如果不太理解就记住就好了,忘记了就看看,写多了说不定有一天就会理解了;
删除操作
这个操作调用的remove方法,这个有点意思,因为你在API文档中找不到Properties类有这个方法,那么就可以看一下源码:
可以发现它实际调用了别人的remove方法,那么是谁的呢?我们再往下看:
这个其实就是ConcurrentHashMap的方法,所以这个remove方法并没有记在Properties类中;
其实学会怎么使用就行了,这个使用也很简单,同样用代码示范一下:
package io;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;// 实现对.properties 文件内容的删除
public class PropertiesBlog03 {public void deleteProperties() throws IOException {Properties properties = new Properties();// 将文件数据加载到内存中properties.load(new FileInputStream("blogtest.properties"));// 通过键值删除对应的数据properties.remove("gender"); // 删除性别//重置文件中数据properties.store(new FileOutputStream("blogtest.properties"), "this is a comment");}public static void main(String[] args) throws IOException {PropertiesBlog03 propertiesBlog03 = new PropertiesBlog03();propertiesBlog03.deleteProperties();}
}
运行后文件变为:
#this is a comment
#Fri Nov 19 21:22:00 CST 2021
name=jack
age=18
可以看到gender键值对以及删除了;
总结
这就是对Properties的一些基础介绍,可能在使用时还会遇到其他问题,可以在评论区和我交流,希望这篇文章能够给你带来帮助!!
欢迎大家的点评!
[Java基础] Properties类的基本操作和介绍相关推荐
- Java基础——Properties类
目录 1.Properties类的概述 2.Properties类方法 3.Properties类的实例 本文章的部分笔记整理来自https://www.runoob.com/java/java-pr ...
- Java基础-Date类常用方法介绍
Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...
- java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...
- java中properties作用,java中Properties类的使用
java中Properties类的使用 在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件). Propert ...
- Java基础笔记 – 枚举类型的使用介绍和静态导入
Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views+ 1.枚举(Enum): JD ...
- Java中Properties类的使用
在项目的开发中,我们经常写一些.properties文件 用来配置一些相关的内容,比如端口号 IP地址 服务器数据库的地址等等 PS 当然这些东西也是能够写在XML 文件内的. 下面摘抄2处 对于这些 ...
- Java中Properties类的操作
Java中Properties类的操作 ============================================= com.gordon.constant Constant.java: ...
- java集合——java.util.Properties类
[0]README 0.1)以下全文转自 : http://trans.blog.51cto.com/503170/110227/ [1]认识properties文件 1. properties文件是 ...
- Java中Properties类的学习总结
学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 一.认识prope ...
最新文章
- php静态属性获取$_get,php - PHP的静态属性的Magic __get getter - SO中文参考 - www.soinside.com...
- Flex4中的皮肤(2): Skin State
- RK 3399 切换以太网卡
- mysql sharding 读取_MySQL读写分离(一)——sharding-jdbc
- react脚手架_react脚手架create-react-app安装与使用
- vue企业门户网站模板_6 个火爆 GitHub 的后台管理模板,快来收藏!
- 解决虚拟机卡 鼠标拖动很慢 有效解决办法
- Netty源码分析第1章(Netty启动流程)----第3节: 服务端channel初始化
- 电脑端OneNote2019(win10系统)登录微软账号登陆错误报错误码0x80860010错误-已解决
- TypeScript转JavaScript的方法。
- 计算机网络 互联网使用的安全协议
- WINDOWS优化大师揭密
- 山东理工大学ACM平台题答案关于C语言 1177 C语言实验——时间间隔
- 计算机网络期末考试试题,计算机网络期末考试题库.docx
- NPN、PNP型三极管的常见问题
- STM32学习笔记---触摸屏
- 软工1816 · 第二次作业 - 个人项目
- 安装算量软件哪个速度快效率高?
- 【顶】(与同事合作的快乐)技术人员也需要先学会做人,再学会做事,再是能成事,最后是成名得利
- PPAPI插件的全屏切换处理
热门文章
- access 战地1不加入ea_战地1正式加入origin access
- php fstat,PHP函数fstat介绍
- java 服务器发布_我如何在java中发布到服务器?
- python粘贴代码到word_Python复制Word内容并使用格式设字体与大小实例代码
- 信息系统运维安全管理规定(可作为范文参考)
- Equinix 位于伦敦的LD8数据中心发生严重故障
- 地震也能照常运行的数据中心新设计
- AI:周志华老师文章《关于强人工智能》的阅读笔记以及感悟
- DL之YoloV3:YoloV3论文《YOLOv3: An Incremental Improvement》的翻译与解读
- 成功解决AttributeError: module ‘enum‘ has no attribute ‘IntFlag‘?