day_8/22(浅谈Properties属性集)

目录

前言

一、概述

二、使用

三、总结


前言

        在学习编程的时候,有一句话叫做不要把程序写死了,这句话是经常听见的,所以在编写程序的时候能用变量代替的就用变量,不要直接写数据,把程序写的那么固定,要灵活一点,但是在与外部交互的时候,例如与连接数据库、连接服务器,与它们交互,又是需要用户名,又是需要密码,又是需要端口号,IP地址什么的,如果我的数据库修改了密码,或者修改了其它连接时需要用到的数据呢,或许你想到了修改源码,但是修改源码不仅麻烦,而且在有些情况下,你的程序是不能够停止的,这时候一种非常好的设计理念就出现了,那就是使用配置文件,程序从配置文件里面来动态获取这些连接数据库需要用到的数据,这个时候程序是不是就更灵活了,修改了数据之后,程序只需要重新读取一边配置文件即可,既不需要更改程序的源代码后重新编译,也不需要重启服务器什么的,程序里的信息就更新了;那么问题来了,配置文件怎么操作呢?Java个我们提供了一个类,操作配置文件非常的方便,它就是Properties,下面请看Properties类的介绍即及使用。

一、概述

        Properties本质上就是一个Map集合,它继承自HashTable,(HashTable已被HashMap取代),并且可以与IO流相结合,这就大大的方便了 操作配置文件。         

        需要注意的是,Properties属性集与集合不一样的是,它里面的键和值都是String类型的,并且它没有泛型。

二、使用

学习一个类首先就是看它的构造方法,所以先看Properties的构造方法:

1、Properties(),无参构造,该方法创建一个没有默认值的空属性列表

2、Properties(int initialCapacity),该方法需要一个int类型的参数,创建一个没有默认值的空属性列表,其初始大小可容纳指定数量的元素,无需动态调整大小。

3、Properties(Properties defaults),该方法需要一个Properties对象作为参数,创建具有指定默认值的空属性列表。 创建对象这里就不过多介绍了,后面会有代码演示         

学习了构造方法,再来看常用的方法:

1、添加元素使用的是setProperty(String key, String value)方法,该方法其实与put()方法没有多大区别,因为它就是调用了put()方法。

2、获取元素使用的是getProperty(String key),该方法传入键,返回键所对应的值,相当于HashMap集合的get方法,都是差不多的,代码演示就放到后面了。         

下面来看Properties相对于HashMap特有的方法:

        既然要操作文件,那么是不是要有与文件读写相关的方法呢?

先看写出数据到文件里的方法 :

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

public void store(Writer writer, String comments)将此表中的此属性列表(键和元素对)以 Properties适合使用该load(Reader) 方法的格式写入输出字符流。

public void storeToXML(OutputStream os, String comment)发出表示此表中包含的所有属性的 XML 文档。

public void storeToXML(OutputStream os, String comment, String encoding)使用指定的编码发出表示此表中包含的所有属性的 XML 文档。

public void storeToXML(OutputStream os, String comment, Charset charset)使用指定的编码发出表示此表中包含的所有属性的 XML 文档。

import java.io.*;
import java.util.Map;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws IOException {
        //创建Properties对象
        Properties properties = new Properties();
        //添加一些数据进去
        properties.setProperty("userName","Admin");
        properties.setProperty("passWord","admin123");
        properties.setProperty("port","3306");


        //写入数据到文件
        //以字节流的方式写入
        properties.store(new FileOutputStream("f:\\test\\db0.properties"),"测试数据写出到配置文件");
        //以字符流的方式写入
        properties.store(new FileWriter("f:\\test\\db1.properties"),"测试数据写出到配置文件");
        //以xml文档的方式写入,使用默认编码
        properties.storeToXML(new FileOutputStream("f:\\test\\db0.xml"),"测试数据写出到配置文件");
        //以xml文档的方式写入,指定编码
        properties.storeToXML(new FileOutputStream("f:\\test\\db1.xml"),"测试数据写出到配置文件", "GBK");
    }
}

运行结果:

 

 

 

 

 观察发现,使用字节流和字符流写入的db0.,properties和db1.,properties效果是一样,但是写入xml文件中指定编码和不指定编码就出现了区别。

        再看从配置文件读取数据的方法

public void load(InputStream inStream)从输入字节流中读取属性列表(键和元素对)。

public void load(Reader reader)以简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。

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

import java.io.*;
import java.util.Map;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws IOException {

        Properties properties = new Properties();
        //这里只以以字符流的方式读取,字节流的操作类似,不作演示
        properties.load(new FileReader("f:\\test\\db0.properties"));
        //遍历输出一下
        for (Map.Entry<Object, Object> entry : properties.entrySet()) {
            System.out.println(entry);
        }
        Properties properties1 = new Properties();
        properties1.loadFromXML(new FileInputStream("f:\\test\\db0.xml"));
        //遍历输出一下
        for (Map.Entry<Object, Object> entry : properties.entrySet()) {
            System.out.println(entry);
        }

    }
}

运行结果:

三、总结

Properties属性集用的多的应该就是读取配置文件了,就像前面说的,让程序灵活一点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值