当前位置: 首页 > news >正文

属性集合Properties

概述

java.util.Properties继承于Hashtable,来表示一个持久的属性集。Properties可以保存在流中或从流中加载。它使用键值结构存储数据,每个键及其对应值都是一个字符串(双列集合)。该类也被许多java类使用,比如获取系统属性时,System.getProperties方法就是返回一个Properties对象。

Hashtable是最早期的双列集合,但由于其单线程操作被Hashmap替代了,然而其子类Properties仍活跃着,因为是唯一和IO流相结合的集合。Properties类的出现简化了对属性持久化的操作。属性持久化又大大简化了建立高扩展性程序的过程。

简单理解:是一个可以持久化读写数据(键值对)的集合对象。

Properties类

构造方法

构造方法摘要
Properties()
          创建一个无默认值的空属性列表。
Properties(Properties defaults)
          创建一个带有指定默认值的空属性列表。

知识点连接:持久化作用是将程序数据在持久状态和瞬时状态间转换的机制。即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储。

 voidstore(OutputStream out, String comments)
          以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
 voidstore(Writer writer, String comments)
          以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。

参数:OutputStream:字节输出流,不能写中文(英文字母(不分大小写)和数字以ASCII码存储在文件里都是占一个字节,中文占俩,但字节输出流一次读写一个字节,故无法写中文)

           Writer writer:字符输出流,可以写中文。

           String comments:注释,解释说明保存的文件是做什么用的。注意该注释不能使用中文,会产生乱码(因为其默认为Unicode编码,但系统默认编码是GBK),一般使用空字符串。

使用步骤:

1.创建Properties集合对象,添加数据。

2.创建字节/字符输出流对象,构造方法中绑定要输出的目的地

3.使用Properties集合对象的方法store,将集合中的数据,持久化写入到硬盘中存储。

4.释放资源

// 可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储。
// 创建Properties集合对象,添加数据。
Properties prop = new Properties();
// public  Object setProperty(String key,String value):保存一对属性。
prop.setProperty("赵丽颖","冯绍峰");
prop.setProperty("孙俪","邓超");
prop.setProperty("陶虹","徐峥");

// 创建字节/字符输出流对象,构造方法中绑定要输出的目的地
FileWriter fw = new FileWriter("D:\\a\\cc.txt");
// 使用Properties集合对象的方法store,将集合中的数据,持久化写入到硬盘中存储。
prop.store(fw,"save data");
// 释放资源
fw.close();

运行截图:

也可以使用Properties集合中的方法load,可以把硬盘中的文件(键值对),读取到集合中使用。

 voidload(InputStream inStream)
          从输入流中读取属性列表(键和元素对)。
 voidload(Reader reader)
          按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。

参数:InputStream:字节输入流,不能读取含有中文的键值对(英文字母(不分大小写)和数字以ASCII码存储在文件里都是占一个字节,中文占俩,但字节输出流一次读写一个字节,故无法写中文)

           Writer writer:字符输入流,能读取含有中文的键值对。

使用步骤:

1.创建Properties集合对象。

2.使用Properties集合对象中的方法load读取保存键值对的文件。

3.遍历Properties集合。

注意事项:

1.存储键值对的文件中,键与值默认的连接符号可以使用等于号、空格或其他符号。

2.存储键值对的文件中,可以使用#进行注释,被注释的键值对不会再被读取。

3.存储键值对的文件中,键与值默认都是字符串,不用再加引号。

// 创建Properties集合对象
Properties prop = new Properties();
// 使用Properties集合对象中的方法load读取保存键值对的文件。
prop.load(new FileReader("D:\\a\\cc.txt"));
// 获取所有键
Set<String> keySet = prop.stringPropertyNames();
for(String key : keySet){ // 遍历
    System.out.println("key:" + key + ",value:" + prop.getProperty(key));
}

基本的存储方法

public  Object setProperty(String key,String value):保存一对属性。(底层就是调用Hashtable的put方法)

public String getProperty(String key):使用此属性列表中指定的键搜索属性值。相当于Map集合中的的get(key)方法,但固定了参数类型为String

public Set<String> stringPropertyNames():所有键的名称的集合。相当于Map集合中的的keySet方法,但固定了参数类型为String

// 创建一个Properties对象,泛型默认字符串
Properties prop = new Properties();
// public  Object setProperty(String key,String value):保存一对属性。
prop.setProperty("赵丽颖","冯绍峰");
prop.setProperty("孙俪","邓超");
prop.setProperty("陶虹","徐峥");

// public Set<String> stringPropertyNames():所有键的名称的集合。
Set<String> keySet = prop.stringPropertyNames();
for(String key : keySet){ // 遍历输出key
    // public String getProperty(String key):使用此属性列表中指定的键搜索属性值。
    System.out.println("key:" + key + ",value:" + prop.getProperty(key));
}

运行截图:

 

 

相关文章:

  • 缓冲流
  • 转换流InputStreamReader类和OutputStreamWriter(字符编码和字符集)
  • 序列化与反序列化和transient瞬态关键字
  • 打印流
  • 前缀(波兰)、中缀、后缀(逆波兰)表达式
  • 递归(回溯之迷宫问题+八皇后)
  • 算法题-Java实现:从 1 到 n 整数中 1 出现的次数(时间复杂度O(logn))
  • 软件结构/网络通信协议/IP地址/端口号
  • TCP通信程序
  • C/S结构文件上传案例
  • 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)
  • 二分查找和插值查找
  • 树-二叉树(前中后序遍历+按值查找+删除节点)
  • 位运算应用场景(每遇更新)
  • 工作期间常用的linux命令
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • AWS实战 - 利用IAM对S3做访问控制
  • es6要点
  • HTML5新特性总结
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • js对象的深浅拷贝
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Protobuf3语言指南
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 初识MongoDB分片
  • 思维导图—你不知道的JavaScript中卷
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​ArcGIS Pro 如何批量删除字段
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (JS基础)String 类型
  • (九)One-Wire总线-DS18B20
  • (十八)SpringBoot之发送QQ邮件
  • (学习日记)2024.01.09
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)ORM
  • .dwp和.webpart的区别
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Remoting常用部署结构
  • .NET中winform传递参数至Url并获得返回值或文件
  • .project文件
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @Autowired自动装配
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [autojs]逍遥模拟器和vscode对接
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BT]BUUCTF刷题第8天(3.26)
  • [CLR via C#]11. 事件
  • [dts]Device Tree机制