六、Properties 集合的使用

目录

1. Properties 集合简介 

2. 使用 Properties 集合加载 .properties 文件

3. 用 Properties 集合加载 .xml 文件


1. Properties 集合简介 

流的使用,为我们提供了诸多把数据永久保存的方法,但问题也随之出现。这些被写入的数据没有相对固定的规格,程序端若想要获取其中的有用数据,就必须知道这些数据的组合规则,再根据其特点获取其中的有用信息。例如文件中保存一组数据:

账户:smallOrange

密码:123456

邮箱:12345678@qq.com

尽管这组数据看起来很整齐,方便阅读,但若想要计算机准确的读入其中的有用信息,还是要在读入时设置繁杂的步骤。比如按冒号隔开读取等等一些列的操作,这样就严重的影响获取数据的效率。要想提高效率,就必须规定一套统一的读写规则,这样就无需再去专门花费时间来研究数据的组合规则,并针对此规则设计读入方法。

为此,Java 引入了 Properties 集合。此集合继承自 HashTable,但却是所有集合中唯一可以直接操作流的集合,并且还规定了数据的读写规则。 正因为如此,该集合可以直接实现数据的持久化,而无需上面所提到的那些繁琐复杂的步骤。 

Properties 集合的特点:

① Properties类表示了一个持久的属性集

② Properties可保存在流中,或从流中加载

③ 属性列表中每个及其对应值都是一个字符串

④ 两个唯一:唯一可以直接操作流的集合;唯一没有泛型的集合。

 Properties 集合的使用场景:

在很多需要避免硬编码的应用场景下需要使用 .properties 文件来加载程序需要的配置信息,比如JDBC、MyBatis框架等。Properties 集合则是 properties 文件和程序的中间桥梁,不论是从 .properties 文件读取信息还是写入信息到 properties 文件都要经由 Properties 集合。Properties 不仅可以加载 .properties 文件,还可以用来加载 .xml 文件。


2. 使用 Properties 集合加载 .properties 文件

(1)Properties 集合常用方法介绍

 StringgetProperty(String key)
          用指定的键在此属性列表中搜索属性。
 voidload(InputStream inStream)
          从输入流中读取属性列表(键和元素对)。
 voidload(Reader reader)
          按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
 ObjectsetProperty(String key, String value)
          调用 Hashtable 的方法 put
 voidstore(OutputStream out, String comments)
          以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
 voidstore(Writer writer, String comments)
          以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。
 Set<String>stringPropertyNames()
          返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。

(2)什么是 .properties 文件

一种规定了文本内容书写格式的文本文件,文件中的内容格式必须为:key值 = value值。这种格式正是基于 Properties 集合规定的,方便读取。.properties 文件是 Java 默认的配置文件!

(3)使用 load( ) 方法加载配置文件

    @Test
    public void load() throws IOException {
        //文件路径
        String filePath = "src\\com\\java\\day12\\file.properties";
        //创建字符流(因为要加载中文)
        FileReader fileReader = new FileReader(filePath);
        //创建Properties集合
        Properties properties = new Properties();
        //使用字符流加载文件
        properties.load(fileReader);
        //独有的获取键集合的方法
        Set<String> strings = properties.stringPropertyNames();
        //打印Properties集合信息
        for (String key:strings){
            System.out.println(key+" = "+properties.getProperty(key));
        }
        //关闭资源
        fileReader.close();
    }

(4)使用 store( ) 方法写入 Properties 集合数据

    @Test
    public void store() throws IOException {
        //文件路径
        String filePath = "src\\com\\java\\day12\\store.properties";
        //创建字符流(因为要写入中文)
        FileWriter writer = new FileWriter(filePath);
        //创建Properties集合
        Properties properties = new Properties();
        //键入信息
        properties.setProperty("数据库","MySQl");
        properties.setProperty("版本","5.0");
        properties.setProperty("用户","root");
        properties.setProperty("密码","123456");
        //写入文件
        //第二个参数为注释,且不能为中文
        properties.store(writer,"SQL info");
        //关闭资源
        writer.close();
    }

  


3. 用 Properties 集合加载 .xml 文件

(1)什么是 .xml 文件

Extensible Markup Language,简称 XML,中文含义是可扩展标记语言,该语言与 HTML 类似,主要功能是传输数据、储存数据和共享数据。XML 语言没有规定的标签体,需要自定义标签,是一种自我描述的语言。XML 与 HTML 有着本质的区别,XML 传输和存储数据,而 HTML 用来显示数据。

使用 .xml 文件作为属性文件必须要在文件中加入以下的声明,并严格遵循以下格式:

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

格式:
<properties>
    <comment>注释</comment>
    <entry key="键">值</entry>
</properties>

(2)使用 storeToXML( ) 方法写入数据

 voidstoreToXML(OutputStream os, String comment)
          发出一个表示此表中包含的所有属性的 XML 文档。
 voidstoreToXML(OutputStream os, String comment, String encoding)
          使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。
    @Test
    public void xmlStore() throws IOException {
        //文件路径
        String filePath = "src\\com\\java\\day12\\file.xml";
        //创建字符流(因为要写入中文)
        FileOutputStream fos = new FileOutputStream(filePath);
        //创建Properties集合
        Properties properties = new Properties();
        //键入信息
        properties.setProperty("数据库","MySQl");
        properties.setProperty("版本","5.0");
        properties.setProperty("用户","root");
        properties.setProperty("密码","123456");
        //写入文件
        //第二个参数为注释,且不能为中文
        properties.storeToXML(fos,"SQL data","utf-8");
        //关闭资源
        fos.close();
    }

   

(3)使用 loadFromXML( ) 方法加载数据

 voidloadFromXML(InputStream in)
          将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。

 具体操作与加载 .properties 文件相同,此处不再演示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值