5.8 Properties

一、Propertie

主要用于读写资源配置文件。

Properties继承自Hashtable。

我们来看下HashMap和Hashtable的区别:

  Hashtabl  线程安全,    同步,   效率较低。

  HashMap 线程不安全,不同步,效率高。

 

  Hashtable key和value都不能为空

  HashMap 允许一个key为null,允许多个value为null。

 

Properties中每个key及value都只能是字符串,由于其继承自Hashtable所以都不能为空。

为空会抛出NullPointException。

 

二、常用方法

getProperty(String key)

根据key返回对应的value。


getProperty(String key, String defaultValue)
根据key返回对应的value,如果,不存在则返回defaultValue。

defaultValue自己指定,作为key为空时的备用选项。

 

setProperty(String key, String value)

设置Properties的key和value

 

我们先来用下这几个方法,和之前使用Map差不多

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]){
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");//添加元素
        pro.setProperty("URL", "jdbc:mysql://localhost:3306/jdbc");
        pro.setProperty("USER", "root");
        pro.setProperty("PASS", "xxxxxx");
        Set<Map.Entry<Object, Object>> mS= pro.entrySet();//使用迭代器输出所有元素
        Iterator<Map.Entry<Object,Object>> ite = mS.iterator();
        while(ite.hasNext()){
            Entry<Object,Object> en = ite.next();
            System.out.println("key:" +en.getKey() + "-->"+"value:" +en.getValue());
        }
    }
}
运行结果:
key:PASS-->value:xxxxxx
key:URL-->value:jdbc:mysql://localhost:3306/jdbc
key:USER-->value:root
key:DIVER-->value:com.mysql.cj.jdbc.Driver

 

此时pro对象中就有这些配置信息,接下来那我们将这些配置信息生成配置文件。

 

生成*.properties文件

store(OutputStream out,String comments);

生成*.xml文件

storeToXml(OutputStream out,String comments);

 

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]) throws FileNotFoundException, IOException{
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");
        pro.setProperty("URL", "jdbc:mysql://localhost:3306/jdbc");
        pro.setProperty("USER", "root");
        pro.setProperty("PASS", "xxxxxx");
        pro.store(new FileOutputStream("E:/sqlProperties.properties"), "sql");//E盘下生成properties格式的文件
        pro.storeToXML(new FileOutputStream("E:/sqlXml.xml"), "sql");//E盘下生成xml格式文件
    }
}

运行后我们会发现E盘下多了两个文件:

 

 

我们用记事本打开这两个文件:

我们之前的配置信息就生成了对应的配置文件。 

 

上面使用的是绝对路径,我们一般使用相对路径,默认在当前工程下。

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]) throws FileNotFoundException, IOException{
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");
        pro.setProperty("URL", "jdbc:mysql://localhost:3306/jdbc");
        pro.setProperty("USER", "root");
        pro.setProperty("PASS", "xxxxxx");
        pro.store(new FileOutputStream("sqlProperties.properties"), "sql");
        pro.storeToXML(new FileOutputStream("src/sqlXml.xml"), "sql");
    }
}

 

 

可以看到

"sqlProperties.properties"是直接保存到当前项目下,

"src/sqlXml.xml"是保存在当前工程下的src文件夹下。

没有使用绝对路径的话,前端默认加上当前工程路径。

这就是相对这个工程而言的相对路径。

posted @ 2018-10-18 23:25  gcmh  阅读(269)  评论(0编辑  收藏  举报