四、Properties类
Properties父类为Hashtable
4.1 作用
用于对.properties这类的配置文件进行一系列更简单的操作
-
格式:键=值,默认String类型
-
创建一个mysql.properties文件,读取其中的ip、user、pwd值
-
mysql.properties
ip=192.168.100.100 user=root pwd=123456
-
-
传统方式
-
过于繁琐,若配置文件内容过多时,就无法有效地读取配置
BufferedReader br= new BufferedReader(new FileReader("src:\\mysql.properties")); String line = ""; while((line = br.readLine())!=null) { String[] split = line.split("="); System.out.print(split[0]+"值是"+split[1]); } br.close();
-
-
因而使用Properties类为最佳
4.2 常用方法
-
构造方法
-
Properties()
:创建一个无默认值的空属性列表 -
Properties(Properties defaults)
:创建一个带有指定默认值的空属性列表
-
-
常用方法
【加载配置文件】
-
load ( InputStream inStream)
从byte stream中加载key/value键值对,要求所有的key/value键值对是按行存储,同时是用ISO-8859-1编译的, 不支持中文。 -
load(Reader reader)
从字符流中加载key/value键值对,要求所有的键值对都是按照行来存储的。 -
loadFromXML(InputStream )
从xml文件中加载property,底层使用XMLUtils.load(Properties,InputStream)方法来加载。
【获取/设置属性】
-
getProperty ( String key[,String default])
根据指定的key获取对应的属性value值,如果在自身的存储集合中没有找到对应的key,那么就直接到默认的defaults属性指定的Properties中获取属性值。-
default 方法返回值为null的时候,返回给定的默认值,而不是返回null。
-
-
setProperty ( String key, String value)
调用 Hashtable 的方法 put 。他通过调用基类的put方法来设置 键 - 值对。-
有key,修改
-
无key,新增
-
【写出至配置文件】
-
store ( OutputStream out, String comments)
将所有的Properties类中保存的键值对都写出到流中,中文存储的是unicode码值同时如果给定comments的话,那么要加一个注释。
-
storeToXML(OutputSteam out,String comment,String encoding)
写出到xml文件中。 -
Set stringPropertyNames()
获取所有Properties中所有的key集合
【指定显示设备】
-
list(PrintStream / PrintWriter)
:将数据属性显示到指定设备/流对象PrintStream 字节输出流
PrintWriter 字符输出流
【清空属性】
-
clear ()
清除所有装载的 键值对。该方法在基类中提供。
-
4.3 示例
示例1:利用Properties类完成对mysql.properties的读取
public static void main(String[] args) { // 第一步:创建Properties配置类 Properties properties = new Properties(); InputStream in = null; try { // 第二步:创建与文件连接的输入流 String currentDir = System.getProperty("user.dir"); in = new FileInputStream(currentDir + "\\src\\io\\Properties\\mysql.properties"); // 第三步:加载要读取的配置文件 参数InputStream类型 properties.load(in); // 第四步:获取所需的属性 String ip = properties.getProperty("ip"); String user = properties.getProperty("user"); String pwd = properties.getProperty("pwd"); System.out.print(ip + " " + user + " " + pwd); // 第五步:指定输出所有属性到输出流 properties.list(System.out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
示例2:利用Properties类添加key-val到新文件mysql2.properties中
public static void main(String[] args) { //第一步:创建Properties配置类 Properties properties = new Properties(); OutputStream out = null; //第二步:设置要写入/修改的key-val properties.setProperty("localhost","3306"); properties.setProperty("password", "13132131"); try { //第三步:指定写入的配置文件路径 String currentDir = System.getProperty("user.dir"); out = new FileOutputStream("mysql2.properties");// 该文件写入的位置是 工作目录\\mysql2.properties //第四步:加载配置文件 properties.store(out, null); System.out.println("修改配置文件成功!"); } catch (IOException e) { // TODO Auto-generated catch block System.out.println("修改配置文件失败!"); e.printStackTrace(); } }
-
写入的中文注释,会变成对应的unicode码
示例3:利用Properties类完成对mysql.properties的读取,并修改某个key-val
【注意】Properties配置类,只能通过覆盖原先文件的所有内容,去修改单个key值
public static void main(String[] args) throws IOException { //1、创建Properties对象 Properties properties = new Properties(); //2、加载指定配置文件 //注意:1.这里的Test.class,你在哪个类中就写这个类的名字 //2.test.properties实际要读哪个文件就改成哪个文件名 String currentDir = System.getProperty("user.dir"); properties.load(new FileInputStream(currentDir+"\\src\\io\\Properties\\mysql2.properties")); //创建 //1.如果该文件没有key就是创建 //2.如果该文件有key,就是修改 properties.setProperty("name", "liuri"); properties.setProperty("sex", "woman"); //将k-v存储在文件中即可 properties.store(new FileOutputStream("test.properties"), // 该文件写入的位置是 工作目录\\test2.properties "注释,用来解释说明保存的文件是做什么用的,不能使用中文,会产生乱码,默认是Unicode编码,一般使用“”空字符串"); System.out.println("保存配置文件成功~"); }