引言

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

写入操作

写入操作就有点意思了,这里写入分为三种情况:

  1. 写入新数据覆盖之前的数据
  2. 写入新数据不会覆盖之前的数据,但是如果有重复键值不会覆盖
  3. 写入新数据不会覆盖之前的数据,且有重复的键值会覆盖

这三种情况一般按需求使用,但是我感觉最常用的还是第三种(只是个人观点);
下面我用代码示范一下,代码中已有详细注释;

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类的基本操作和介绍相关推荐

  1. Java基础——Properties类

    目录 1.Properties类的概述 2.Properties类方法 3.Properties类的实例 本文章的部分笔记整理来自https://www.runoob.com/java/java-pr ...

  2. Java基础-Date类常用方法介绍

    Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...

  3. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

  4. java中properties作用,java中Properties类的使用

    java中Properties类的使用 在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件). Propert ...

  5. Java基础笔记 – 枚举类型的使用介绍和静态导入

    Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views+ 1.枚举(Enum): JD ...

  6. Java中Properties类的使用

    在项目的开发中,我们经常写一些.properties文件 用来配置一些相关的内容,比如端口号 IP地址 服务器数据库的地址等等 PS 当然这些东西也是能够写在XML 文件内的. 下面摘抄2处 对于这些 ...

  7. Java中Properties类的操作

    Java中Properties类的操作 ============================================= com.gordon.constant Constant.java: ...

  8. java集合——java.util.Properties类

    [0]README 0.1)以下全文转自 : http://trans.blog.51cto.com/503170/110227/ [1]认识properties文件 1. properties文件是 ...

  9. Java中Properties类的学习总结

    学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 一.认识prope ...

最新文章

  1. php静态属性获取$_get,php - PHP的静态属性的Magic __get getter - SO中文参考 - www.soinside.com...
  2. Flex4中的皮肤(2): Skin State
  3. RK 3399 切换以太网卡
  4. mysql sharding 读取_MySQL读写分离(一)——sharding-jdbc
  5. react脚手架_react脚手架create-react-app安装与使用
  6. vue企业门户网站模板_6 个火爆 GitHub 的后台管理模板,快来收藏!
  7. 解决虚拟机卡 鼠标拖动很慢 有效解决办法
  8. Netty源码分析第1章(Netty启动流程)----第3节: 服务端channel初始化
  9. 电脑端OneNote2019(win10系统)登录微软账号登陆错误报错误码0x80860010错误-已解决
  10. TypeScript转JavaScript的方法。
  11. 计算机网络 互联网使用的安全协议
  12. WINDOWS优化大师揭密
  13. 山东理工大学ACM平台题答案关于C语言 1177 C语言实验——时间间隔
  14. 计算机网络期末考试试题,计算机网络期末考试题库.docx
  15. NPN、PNP型三极管的常见问题
  16. STM32学习笔记---触摸屏
  17. 软工1816 · 第二次作业 - 个人项目
  18. 安装算量软件哪个速度快效率高?
  19. 【顶】(与同事合作的快乐)技术人员也需要先学会做人,再学会做事,再是能成事,最后是成名得利
  20. PPAPI插件的全屏切换处理

热门文章

  1. access 战地1不加入ea_战地1正式加入origin access
  2. php fstat,PHP函数fstat介绍
  3. java 服务器发布_我如何在java中发布到服务器?
  4. python粘贴代码到word_Python复制Word内容并使用格式设字体与大小实例代码
  5. 信息系统运维安全管理规定(可作为范文参考)
  6. Equinix 位于伦敦的LD8数据中心发生严重故障
  7. 地震也能照常运行的数据中心新设计
  8. AI:周志华老师文章《关于强人工智能》的阅读笔记以及感悟
  9. DL之YoloV3:YoloV3论文《YOLOv3: An Incremental Improvement》的翻译与解读
  10. 成功解决AttributeError: module ‘enum‘ has no attribute ‘IntFlag‘?