1. 概述

properties 特殊字符_java


java.util.Properties 继承于Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties 方法就是返回一个Properties对象。

2. Properties类

java.util.Properties集合extends Hashtable<k,v> implements Map<k,v>Properties类表示了一个持久的属性集。Properties可保存在流中或从流中加载。
Properties集合是一个唯一和IO流相结合的集合

  • 可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储
  • 可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对),读取到集合中使用

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

  • Properties集合是一个双列集合,key和value默认都是字符串

2.1 构造方法

  • public Properties() :创建一个空的属性列表。

2.2 基本的存储方法

使用Properties集合存储数据,遍历取出Properties集合中的数据
Properties集合是一个双列集合,key和value默认都是字符串
Properties集合有一些操作字符串的特有方法

  • public Object setProperty(String key, String value) : 保存一对属性。
    调用 Hashtable 的方法 put。
  • public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。
    通过key找到value值,此方法相当于Map集合中的get(key)方法。
  • public Set<String> stringPropertyNames() :所有键的名称的集合。
    返回此属性列表中的键集,其中该键及其对应值是字符串,此方法相当于Map集合中的keySet方法。
public class ProDemo {
    public static void main(String[] args) throws FileNotFoundException {
        // 创建属性集对象
        Properties prop = new Properties();
        // 添加键值对元素
        prop.setProperty("方一凡","168");
        prop.setProperty("乔英子","165");
        prop.setProperty("王一笛","160");
        //prop.put(1,true); // 不建议,最好使用自己特有的方法

        // 打印属性集对象
        System.out.println(prop);

        // 通过键,获取属性值
        System.out.println(prop.getProperty("方一凡"));
        System.out.println(prop.getProperty("乔英子"));
        System.out.println(prop.getProperty("王一笛"));

        //使用stringPropertyNames把Properties集合中的键取出,存储到一个Set集合中
        Set<String> set = prop.stringPropertyNames();

        //遍历Set集合,取出Properties集合的每一个键
        for (String key : set) {
            //使用getProperty方法通过key获取value
            String value = prop.getProperty(key);
            System.out.println(key+"--"+value);
        }
    }
}

结果:

{乔英子=165, 方一凡=168, 王一笛=160}
168
165
160
乔英子--165
方一凡--168
王一笛--160

2.3 与流相关的方法

  • public void load(InputStream inStream): 从字节输入流中读取键值对。
  • public void load(Reader reader): 从字符输入流中读取键值对。
参数
  • InputStream inStream:字节输入流,不能读取含有中文的键值对
  • Reader reader:字符输入流,能读取含有中文的键值对
使用步骤
  1. 创建Properties集合对象
  2. 使用Properties集合对象中的方法load读取保存键值对的文件
  3. 遍历Properties集合
注意
  • 存储键值对的文件中,键与值默认的连接符号可以使用=,空格(其他符号)
  • 存储键值对的文件中,可以使用#进行注释,被注释的键值对不会再被读取
  • 存储键值对的文件中,键与值默认都是字符串,不用再加引号

参数中使用了字节输入流,通过流对象,可以关联到某文件上,这样就能够加载文本中的数据了。

文本数据格式

必须是键值对形式,可以使用空格、等号、冒号等符号分隔。

filename=a.txt
length=209385038
location=D:\a.txt

加载代码演示:

public class ProDemo2 {
    public static void main(String[] args) throws FileNotFoundException {
        // 创建属性集对象
        Properties pro = new Properties();
        // 加载文本中信息到属性集
        pro.load(new FileInputStream("read.txt"));
        // 遍历集合并打印
        Set<String> strings = pro.stringPropertyNames();
        for (String key : strings ) {
          	System.out.println(key+" -- "+pro.getProperty(key));
        }
     }
}

结果:

filename -- a.txt
length -- 209385038
location -- D:\a.txt

2.4 store方法

可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储

  • void store(OutputStream out, String comments)
  • void store(Writer writer, String comments)
参数
  • OutputStream out :字节输出流,不能写入中文
  • Writer writer :字符输出流,可以写中文
  • String comments :注释,用来解释说明保存的文件是做什么用的
注意
  1. 不能使用中文,会产生乱码,默认是Unicode编码
  2. 一般使用""空字符串
使用步骤
  1. 创建Properties集合对象,添加数据
  2. 创建字节输出流/字符输出流对象,构造方法中绑定要输出的目的地
  3. 使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储
  4. 释放资源

代码:

public class Demo01Properties {
    public static void main(String[] args) throws IOException {
      //1.创建Properties集合对象,添加数据
        Properties prop = new Properties();
        prop.setProperty("赵丽颖","168");
        prop.setProperty("迪丽热巴","165");
        prop.setProperty("古力娜扎","160");

        //2.创建字节输出流/字符输出流对象,构造方法中绑定要输出的目的地
        FileWriter fw = new FileWriter("E:\\h.txt");

        //3.使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储
        prop.store(fw,"save data");

        //4.释放资源
        fw.close(); // 执行一次就会覆盖文件

//        prop.store(new FileOutputStream("E:\\h.txt"),""); // 乱码

        // 这个流不用关,匿名对象使用完自己就关了
    }
}

结果:

#save data
#Wed Jan 08 20:27:02 CST 2020
赵丽颖=168
迪丽热巴=165
古力娜扎=160