java.util
类 Properties
java.lang.Objectjava.util.Dictionary<K,V>java.util.Hashtable<Object,Object>java.util.Properties

所有已实现的接口:

Serializable, Cloneable, Map<Object,Object>

直接已知子类:

Provider
Public class Properties extends HashTable<Object,Object>

Properties类表示了一个持久的属性集,它是在一个文件中存储键值对儿的,其中键值对儿以等号分隔。Properties可保存在流中或从流中加载。属性列表中的每个键及其所对应的值都是字符串。Properties类是线程安全的:多个线程可以共享单个Properties对象而无需进行外部同步。一组属性示例:
foo=bar
fu=baz

一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。

如果在“不安全”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。类似地,如果在“不安全”的 Properties 对象(即包含非 String 的键)上调用 propertyNames 或 list 方法,则该调用将失败。

除了输入/输出流使用 ISO 8859-1 字符编码外,load(InputStream) / store(OutputStream, String)方法与 load(Reader)/store(Writer, String)对的工作方式完全相同。

loadFromXML(InputStream)storeToXML(OutputStream, String, String)方法按简单的 XML 格式加载和存储属性。默认使用 UTF-8 字符编码,但如果需要,可以指定某种特定的编码。XML 属性文档具有以下 DOCTYPE 声明:

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

一下列出了Properties的方法摘要,有关每个方法的详细使用情况,请参看API:

http://www.apihome.cn/api/java/Properties.html

示例练习一:如何装载属性文件并列出它当前的一组键和值。

思路:传递属性文件的输入流InputStream给load()方法,会将改属性文件中的每个键值对儿添加到Properties实例中;然后条用list()列出所有属性或者使用getProperty()获取单独的属性。(注意 list() 方法的输出中键-值对的顺序与它们在输入文件中的顺序不一样。 Properties 类在一个散列表(hashtable,事实上是一个 Hashtable 子类)中储存一组键-值对,所以不能保证顺序。 )

代码实现:

package com.lmb.thread;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;public class PropertiesTest {public static void main(String[] args) {Properties properties = new Properties();try {properties.load(new FileInputStream("test.properties"));//加载属性文件properties.list(System.out);//将属性文件中的键值对儿打印到控制台properties.getProperty("foo");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

示例练习二:如何装载XML版本的属性文件并列出它当前的一组键和值。(只有装载方法有差异,其余完全相同load(),loadFromXML())

package com.lmb.thread;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;public class PropertiesTest {public static void main(String[] args) {Properties properties = new Properties();try {properties.loadFromXML(new FileInputStream("test.xml"));//加载属性文件properties.list(System.out);//将属性文件中的键值对儿打印到控制台properties.getProperty("foo");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

示例练习三:如何将文件保存到属性文件中?

import java.util.*;
import java.io.*;public class StoreXML {public static void main(String args[]) throws Exception {Properties prop = new Properties();prop.setProperty("one-two", "buckle my shoe");prop.setProperty("three-four", "shut the door");prop.setProperty("five-six", "pick up sticks");prop.setProperty("seven-eight", "lay them straight");prop.setProperty("nine-ten", "a big, fat hen");prop.storeToXML(new FileOutputStream("test.xml"), "saveXML");//将键值对儿保存到XML文件中
prop.store(new FileOutputStream("test.properties"), "saveProperties");//将键值对儿保存到普通的属性文件中fos.close();}
}

将键值对儿保存到XML文件中的输出结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Rhyme</comment>
<entry key="seven-eight">lay them straight</entry>
<entry key="five-six">pick up sticks</entry>
<entry key="nine-ten">a big, fat hen</entry>
<entry key="three-four">shut the door</entry>
<entry key="one-two">buckle my shoe</entry>
</properties>

将键值对儿保存到普通的属性文件中输出结果如下:

one-two=buckle my shoe
three-four=shut the door
five-six=pick up sticks
seven-eight=lay them straight
nine-ten=a big, fat hen

注意:从一个XML文件中装载一组属性,其DTD文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD for properties -->
<!ELEMENT properties ( comment?, entry* ) >
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA) >
<!ELEMENT entry (#PCDATA) >
<!ATTLIST entry key CDATA #REQUIRED>

在外围 <properties> 标签中包装的是一个 <comment> 标签,后面是任意数量的 <entry>标签。对每一个 <entry> 标签,有一个键属性,输入的内容就是它的值。

Properties获取数据乱码解决

1.原因

Properties调用load(InputStream)时,读取文件时使用的默认编码为ISO-8859-1;当我们将中文放入到properties文件中,通过getProperty(key)获取值时,取到得数据是ISO-8859-1格式的,但是ISO-8859-1是不能识别中文的。

2.解决方法

通过getProperty()获取的数据data既然是ISO-8859-1编码的,就通过data.getByte(“iso-8859-1”)获取获取,使用new String(data.getByte(“iso-8859-1”),”UTF-8”)进行转换。当然properties文件的编码类型需要和new String(Byte[],charset)中的第二个参数的编码类型相同。

Properties类详细解析相关推荐

  1. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. Properties类 解析xml文件问题

    使用Properties类的loadFromXml解析xml 报Document root element "student", must match DOCTYPE root & ...

  3. java properties 参数_Java中Properties 类的详细使用

    我把你的头像,设置成我的名字,此刻你便与我同在. 我把你的名字,写进我的代码里面,以后,我的世界便存在着你. 一.Properties 类 Properties 类位于 java.util.Prope ...

  4. Doris FE启动流程源码详细解析

    Doris FE启动流程源码详细解析 一.简介 Apache Doris是一个现代化的MPP分析型数据库产品.仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析.Apache Doris的分布 ...

  5. 最全Linux驱动开发全流程详细解析(持续更新)

    Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...

  6. 深度学习目标检测详细解析以及Mask R-CNN示例

    深度学习目标检测详细解析以及Mask R-CNN示例 本文详细介绍了R-CNN走到端到端模型的Faster R-CNN的进化流程,以及典型的示例算法Mask R-CNN模型.算法如何变得更快,更强! ...

  7. Eclipse快捷键详细解析

    android开发中常用的Eclipse快捷键详细解析 1.查看快捷键定义的地方 Window->Preferences->General->Keys. 2.更改启动页 在Andro ...

  8. 线程同步锁 java_java多线程同步之重入锁,详细解析

    上次已经为大家介绍过java多线程同步,Volatile详解的主要内容了.今天再来为大家介绍一些相关的内容,也就是java多线程同步之重入锁,一起来了解一下吧. 使用重入锁实现线程同步 在JavaSE ...

  9. [Java基础] Properties类的基本操作和介绍

    引言 Java中的.properties文件是一种配置文件,主要用于表达配置信息:通俗来说,存放的数据就像是Map中的key和value的对应关系一样:这样就可以通过键值对来对属性进行匹配,并且属性列 ...

最新文章

  1. 论坛报名 | 视觉大模型是实现视觉智能的必由之路吗?
  2. 脏读和数据库一致性的分析
  3. 3分钟解决MySQL 1032 主从错误(转)
  4. python 之 字符编码 和 中文显示
  5. extern 定义_Essential Cython - 2.7 - 定义并使用模板函数
  6. iOS 混合网页开发 问题
  7. 学习响应式BootStrap来写融职教育网站,Bootsrtap第六天移动端轮播图
  8. 在Spring Framework中通过JNDI进行配置
  9. 三菱PLC支持哪种OPC服务器,OPC-访问三菱Q系列PLC方法
  10. 2019 牛客多校第三场 B Crazy Binary String
  11. 基于simulink的光伏电站仿真_基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(二)...
  12. 阿里云服务器Java+Mysql+Tomcat环境搭建(Mac OS下配置)
  13. 「leetcode」本周小结!(回溯算法系列一)
  14. C#调用阿里云短信接口
  15. beeline常用命令
  16. mybatis当传入数据类型为Int时并且值为0时,会判断为空字符串
  17. 联发科mt6779(Helio P90),mt6775(Helio P70),MT6771(Helio P60),Helio P35,MT6762(Helio P22)处理器参数介绍
  18. HackingClub首场线下技术趴报名通道正式开启!
  19. 【UE4】使用Composure插件在场景或UI中实时显示CineCamera画面
  20. 计算机丢失fine,FineRecovery(文件恢复删除)4.29

热门文章

  1. 解析函數論 Page 22 級數收斂的一個充分條件
  2. windows消息定义
  3. 使用Django搭建web服务器(最最正确的方式)
  4. Misc(网络+组成原理)
  5. Mysql常用的命令
  6. Java集合—哈希(hash)表
  7. Kafka性能强于RabbitMQ的原因
  8. android四个组件的跨进程通信
  9. springboot web 服务器选择
  10. 【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)