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 文件
- 存储键值对的文件中,键与值默认的连接符号可以使用=,空格(其它符号)
- 存储键值对的文件中,可以使用#进行注释,被注释的键值对不会再被读取
- 存储键值对的文件中,键与值默认都是字符串,不用再加引号
先创建两个文件:(database.properties 为GBK编码,database.txt 为UTF-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(); } }