欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

5.8 Properties

程序员文章站 2022-03-26 09:09:36
一、Propertie 主要用于读写资源配置文件。 Properties继承自Hashtable。 我们来看下HashMap和Hashtable的区别: Hashtabl 线程安全, 同步, 效率较低。 HashMap 线程不安全,不同步,效率高。 Hashtable key和value都不能为空 ......

一、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盘下多了两个文件:

5.8 Properties 

 

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

5.8 Properties

5.8 Properties

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

 

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

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");
    }
}

 

 

5.8 Properties

可以看到

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

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

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

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