properties中文乱码_Properties集合(与IO有关的集合)

5c2c400508d12b27b4bf2589459d2838.png

Properties集合

1. 概述

java.util.Properties集合 extends Hashtable<K, V> implements Map<K, V>

Properties叫做属性集, 是一个双列集合, 里面的每一个元素都是键值对, 键和值都是字符串类型

Properties的特点 :

  1. Properties实现了Map接口, 拥有Map中的所有方法
  2. 没有泛型, 键和值都是字符串
  3. 支持对流(文件)的操作, 可以从文件中读取键值对

2. Properties的构造方法

| 构造方法 | 作用 | | -------------- | ------------------------------------------------------------ | | Properties() | 空参数构造方法,使用该构造方法创建的Properties集合里面没有任何东西。 |

3. Properties的方法

| 修饰符 | 返回值 | 方法名 | 参数列表 | 作用 | | ------ | ----------- | --------------------- | ---------------------------- | ------------------------------------------------------------ | | public | Object | setProperty | ( String key, String value ) | 向Properties集合中添加键值对, 相当于put | | public | String | getProperty | ( String key ) | 根据键获取值, 相当于get(key) | | public | Set | stringPropertyNames | ( ) | 获取Properties中的所有的key,并放入到Set集合中返回, 相当于keySet() |

以上基础方法使用示例 :

public class Demo01Properties {
    public static void main(String[] args) {
        //创建Properties集合对象
        Properties p = new Properties();
        //Object setProperty(String key, String value): 向Properties集合中添加键值对。
        p.setProperty("it001", "jack");
        p.setProperty("it002", "rose");
        p.setProperty("it003", "tony");
        //输出结果
        System.out.println(p);
        //String getProperty(String key): 根据键获取值。
        //获取it001对应的值
        System.out.println("it001对应的值:" + p.getProperty("it001"));
        System.out.println("it002对应的值:" + p.getProperty("it002"));
        System.out.println("========================================");
        //Set<String> stringPropertyNames():获取Properties中的所有的key,并放入到Set集合中返回。
        Set<String> set = p.stringPropertyNames();
        //遍历Set集合,获取集合中的每一个键
        for (String key : set) {
            //变量key表示的是集合中的每一个键。
            System.out.println(key + "-" + p.getProperty(key));
        }
    }
}

4. Properties与流相关方法

  1. Properties可以和流一起使用, 可以从文件中读取键值对.
  2. Properties类表示了一个持久的属性集, Properties可保存在流中或从流中加载
  3. Properties集合是唯一一个和IO流相结合的集合
  4. 可以使用Properties集合中的==方法store==, 把集合中的临时数据, 持久化==写入==硬盘中储存
  5. 可以使用Properties集合中的==方法load==, 把硬盘中保存的数据( 键值对 ), ==读取==到集合中使用

上面的load方法,可以将文件中的键值对读取(加载)到Properties集合中,要读取的文件也是有要求的

文件的要求 :

  1. 文件一般以.properties结尾,以.properties结尾的文件一般叫做配置文件 (软性规定)
  2. 文件中的键值对必须按照固定格式保存, 键和值之间使用=隔开,每一个键值对之间要换行(硬性规定)

键=值

键=值

键=值

...

注意 :

  1. 储存键值对的文件中, 键与值默认的连接符号使用=
  2. 储存键值对的文件中, 可以使用#进行注释, 备注是的键值对不会再被读取
  3. 储存键值对的文件中, 键与值默认都是字符串, 不用在加引号

| 修饰符 | 返回值 | 方法名 | 参数列表 | 作用 | | ------ | ------ | ------- | ----------------------------------- | ------------------------------------------------------------ | | public | void | load | ( Reader reader ) | 参数要传递一个字符输入流, 可以将文件中的键值对读取到Properties集合 | | public | void | load | ( InputStream inStream ) | 参数要传递一个字节输入流, 可以将字节输入流对应文件中的键值对读取到Properties集合 | | public | void | store | (Writer writer, String comments) | | | public | void | store | (OutputStream out, String comments) | |

参数 :

​ OutputStream out : 字节输出流, 不能写入中文

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

​ String comments : 注释, 用来解释说明保存的文件是做什么用的

不能使用中文, 会产生乱码, 默认是Unicode编码, 一般用""空字符串.

使用步骤 :

  1. 创建Properties集合对象, 添加数据
  2. 创建字节输出流/ 字符输出流对象, 构造方法中绑定要输出的目的地
  3. 使用Properties集合中的方法store, 把集合中的临时数据, 持久化写入硬盘中储存
  4. 释放资源

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

void load(InputStream inStream)

void load(Reader reader)

参数 :

InputStream inStream : 字节输入流, 不能读取含有中文的键值对

Reader reader : 字符输入流, 能读取含有中文的键值对

public class Demo02Properties {
    public static void main(String[] args) throws IOException {
        //1. 创建Properties集合
        Properties p = new Properties();
        //2. 创建输入流对象,并绑定一个文件。
        InputStream is = new FileInputStream("day11config.properties");
        //3. 调用Properties集合的load方法,传递输入流对象,就可以将文件中的键值对读取到Properties集合了。
        p.load(is);//is这个流绑定的文件是config.properties,所以会将config.properties中的键值对读取到Properties集合
        //输出
        System.out.println(p);
        //4. 释放资源。
        is.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值