属性文件

属性文件:

cp.properties

gzh=xxx
xxx=gzh

模拟解析属性文件

/*
       *.properties 文件, 属性文件
	文件内容格式:
		key1=value1
		key2=value2
		......
		keyN=valueN
* */
public class Demo01 {
    public static void main(String[] args) {
        BufferedReader bufferedReader = null;
        HashMap<String, String> properties = new HashMap<>();
        try {
            FileInputStream fileInputStream = new FileInputStream("D:\\peixun\\培训阶段2笔记\\自己笔记\\JavaSE_day15_IO_03\\src\\com\\csoracle\\属性文件1\\cp.properties");

            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"gbk");

            bufferedReader = new BufferedReader(inputStreamReader);

            String line;
            while ((line=bufferedReader.readLine())!=null){
                String[] strs = line.split("="); // "gzh=xxx" ==> {gzh,xxx}
                properties.put(strs[0],strs[1]);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(bufferedReader!=null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


        Set<Map.Entry<String, String>> entries = properties.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry);
        }
    }
}

Properties类

继承关系: Properties extends Hashtable implements Map
也有Map和Hashtable的一套API

从这个继承关系可以看出Properties也是用key-value键值对的方式存储数据
	key必须为String
	value也必须为String
	会把数据都看为字符串
    
       两个重要的API
     	    setProperty(String key,String value):
     		    设置一对key和value都是字符串类型的键值对
     	        虽然它提供这个方法,但是我们一般不会手动去设置,
                而是调用load(Reader reader)和一个属性文件(*.properties)进行关联,
                将属性文件中的key-value键值对进行出来并存储在Properties对象中。
     
      	    getProperty(String key):
      		    根据key获取value
public class Demo02 {
    public static void main(String[] args) {
        InputStreamReader inputStreamReader = null;
        Properties properties = null;

        try {
            //造流
            FileInputStream fileInputStream = new FileInputStream("D:\\peixun\\培训阶段2笔记\\自己笔记\\JavaSE_day15_IO_03\\src\\com\\csoracle\\属性文件1\\cp.properties");
            inputStreamReader = new InputStreamReader(fileInputStream, "gbk");

            //解析文件
            properties = new Properties();
            properties.load(inputStreamReader);

            //遍历
            Set<Map.Entry<Object, Object>> entries = properties.entrySet();
            //第一种遍历方式: toString(); Properties中重新了toString(),该方法可用于遍历
            System.out.println(entries);

            //第二种和第三种: 因为Properties也是一种Map,所以也可以使用entrySet()和keySet()进行遍历
            for (Map.Entry<Object, Object> entry : entries) {
                System.out.println(entry);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStreamReader != null) {
                try {
                    inputStreamReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

通过类加载器获取到代表cp.properties的流。写cp.properties文件路径的时候使用的相对路径(相对于src而言)

public class Demo03 {
    public static void main(String[] args) throws IOException {
      
        Properties properties = new Properties();

        InputStream resourceAsStream = Demo03.class.getClassLoader().getResourceAsStream("com/csoracle/属性文件1/cp.properties");
        InputStreamReader inputStreamReader = new InputStreamReader(resourceAsStream, "gbk");
        properties.load(inputStreamReader);

        System.out.println(properties);
    }
}

posted @ 2021-07-24 10:27  GzhAnkh  阅读(133)  评论(0)    收藏  举报