Java基础之Properties流

317 阅读3分钟

这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

Properties

  • Properties类是hashtable的子类,它具备map集合的特点,而且它里面存储的键值对都是字符。Properties 可保存在流中或从流中加载。
  • Properties是集合和IO技术相结合的集合容器。
  • Properties 类表示了一个持久的属性集,可以用于键值对形式的配置文件,在加载数据时,需要数据有固定格式:键=值。
  • 比如软件的配置文件:软件的配置信息和数据进行了持久化存储,将配置信息存储到一个文件当中,即配置文件,软件每次打开时,加载配置文件。操作配置文件需要IO流技术。

特点

  • 1.Hashtable的子类,map集合中的方法都可以使用。
  • 2.该集合没有泛型。键和值都是字符串。
  • 3.他时一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化设备中。键值的来源也可以是持久化设备。

1、Properties [ˈprɒpətiz]作为Map集合使用

  • Properties概述:
  • 是一个Map体系的集合
  • Properties可以保存到流或者从流加载
  • 范例:
package test;


import javafx.beans.property.Property;

import java.util.Properties;
import java.util.Set;

public class Demo {
    public static void main(String[] args) {
        Properties prop = new Properties();

        //存储元素
        prop.put("001","小黑");
        prop.put("002","小白");
        prop.put("003","小灰");

        Set<Object> keySet = prop.keySet();
        for(Object key:keySet) {
            Object value = prop.get(key);
            System.out.println(key+","+value);
//            003,小灰
//            002,小白
//            001,小黑
        }
    }
}

2、Properties特有方法

方法名说明
Object setProperty(String key, String value)设置集合的键和值,都是String类型, 底层调用Hashtable方法 put
String getProperty(String key)使用此属性列表中指定的键搜索属性
Set<String> stringPropertyNames()从该属性列表中返回一个不可修改的键集,其中键及其应的值是字符串
  • 范例:
package test;


import javafx.beans.property.Property;

import java.util.Properties;
import java.util.Set;

public class Demo {
    public static void main(String[] args) {
        Properties prop = new Properties();

        //1,Object setProperty(String key, String value) 	设置集合的键和值,都是String类型, 底层调用Hashtable方法 put
        prop.setProperty("001","小黑");
        /*
        public synchronized Object setProperty(String key, String value) {
            return put(key, value);
        }*/
        prop.setProperty("002","小白");
        prop.setProperty("003","小灰");

        /2,String getProperty(String key) 	使用此属性列表中指定的键搜索属性
        System.out.println(prop.getProperty("003")); //小灰
        System.out.println(prop.getProperty("004")); //null

        //3,Set<String> stringPropertyNames() 	从该属性列表中返回一个不可修改的键集,其中键及其应的值是字符串
        Set<String> names = prop.stringPropertyNames();
        for(String key:names) {
//            System.out.println(key);
//            003
//            002
//            001
            String value = prop.getProperty(key);
            System.out.println(key+","+value);
//            003,小灰
//            002,小白
//            001,小黑
        }
    }
}

3、Properties与IO流相结合方法

方法名说明
void load(InputStream inStream)从输入字节流读取属性列表(键和元素对)
void load(Reader reader)从输入字符流读取属性列表(键和元素对)
void store(OutputStream out, String comments)将此属性列表(键和元素对)写入此Properties表中,以适合于使用load(InputStream)方法的格式写入输出字节流
void store(Writer writer, String comments)将此属性列表(键和元索对)写入此Properties表中,以适合使用load(Reader)方法的格式写入输出字符流
  • 范例
package test;


import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class Demo {
    public static void main(String[] args) throws IOException{
        //把集合中的数据保存到文件
        myStore();

        //把文件中的数据保存到集合
        myLood();
    }

    private static void myLood() throws IOException{
        Properties prop = new Properties();

        FileReader fr = new FileReader("E:\\test\\java.txt");
        //2,void load(Reader reader)
        prop.load(fr);
        fr.close();

        System.out.println(prop); //{003=小灰, 002=小白, 001=小黑}
    }

    private static void myStore() throws IOException {
        Properties prop = new Properties();

        prop.setProperty("001", "小黑");
        prop.setProperty("002", "小白");
        prop.setProperty("003", "小灰");

        //4,void store(Writer writer, String comments)
        FileWriter fw = new FileWriter("E:\\test\\java.txt");
        prop.store(fw,null);
        fw.close();
    }
}