Properties集合

Properties 继承了 HashTable,键与值都是String字符串。经常用来设置、读取系统属性。

  • Properties集合是一个双列的Map的
  • 该集合的作用,是将一个配置文件信息快速的读取到集合中
  • key一定是String,value一定是String
  • 集合用于读取配置文件的,key和value都是固定的数据类型,不允许外界指定其他类型的,也就没有泛型的意义了,没有提供泛型的操作,直接将集合中的元素的类型限定死

构造方法

  • Properties() 创建一个无默认值的空属性列表

成员方法

  • void load(InputStream inStream) 从输入流中读取属性列表(键值对)
  • void load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键值对)
  • String getProperty(String key) 用指定的键在此属性列表中搜索属性。 由键返值,无则null
  • Object setProperty(String key, String value) 设置键值对,若键值对已存在,则更新value值
  • Set<String> stringPropertyNames() 返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键

---------------------------------

关于 .properties 文件

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

先创建两个文件:(database.propertiesGBK编码,database.txtUTF-8编码)

一般我们通过字节流读取 properties文件(无论什么编码) 的方式会中文乱码解决办法就是通过转换为字符流的方式读取properties文件

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
// 案例一:通过字节流来读取文件,然后转字符流(同时设定一致的编码)
public class PropertiesTest01 {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        //创建(字节)流对象
        FileInputStream fis = new FileInputStream("day10\\database.properties"); // 该文件使用GBK编码
        InputStreamReader isr = new InputStreamReader(fis, "GBK"); // 转换为字符流,编码方式必须跟文件一致
//        FileInputStream fis02 = new FileInputStream("day10\\database.txt"); // 该文件使用UTF-8编码
//     InputStreamReader isr = New InputStreamReader(fis02, "UTF-8"); //读取流对象所在的配置文件的信息到 Properties集合中
    // void load(Reader reader)
properties.load(isr);
//查看一下 Properties集合中是否有对应的元素 String url = properties.getProperty("url"); String username = properties.getProperty("username"); String password = properties.getProperty("password");
System.out.println(url); System.out.println(username); System.out.println(password);
isr.close(); } }
// 控制台输出结果如下:
  127.0.0.1:3306
  张三
  root
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;
// 案例二:通过字符流来读取文件
public class PropertiesTest01 {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();

        // 创建(字符)流对象
    // FileReader 默认UTF-8编码,读取的(.txt或.properties)文件也为UTF-8编码,才能兼容
        FileReader fr = new FileReader("day10\\database.txt");  // 文件为UTF-8编码,兼容
//       FileReader fr = new FileReader("day10\\database.properties"); // 文件为GBK编码,不兼容,报错,参考案例一做法解决

        // 读取流对象所在的配置文件的信息到 Properties集合中
        properties.load(fr);

        // 遍历 Properties集合
        Set<String> set = properties.stringPropertyNames();  // 获取键集
        for(String key:set) {
            String value=properties.getProperty(key);
            System.out.println(key + "=" + value);
        }

        fr.close();
    }
}

 

posted @ 2022-05-27 17:40  鹿先森JIAN  阅读(96)  评论(0编辑  收藏  举报