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文件夹下。
没有使用绝对路径的话,前端默认加上当前工程路径。
这就是相对这个工程而言的相对路径。