服务器之家

服务器之家 > 正文

Java Property类使用详解

时间:2021-07-29 11:46     来源/作者:CS-Bob

概念理解

properties 继承于 hashtable。表示一个持久的属性集,属性列表以key-value的形式存在,key和value都是字符串。properties类被许多java类使用。例如,在获取环境遍历时它就作为system.getproperties()方法的返回值。我们在很多需要避免硬编码的应用场景下需要使用properties文件来加载程序需要配置的信息,比如jdbc、mybatis框架等。properties类则是properties文件和程序的中间桥梁,不论是从properties文件读取信息还是写入信息到properties文件都要经由properties类。

写入

properties类调用setproperty方法将键值对保存到内存中,此时可以通过getproperty方法读取,propertynames方法进行遍历,但是并没有将键值对持久化到属性文件中,故需要调用store方法持久化键值对到属性文件中。

我们写一个类测试

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.outputstream;
import java.util.date;
import java.util.properties;
 
public class testproperties {
    public void writeproperties() {
        properties properties = new properties();
        outputstream output = null;
        try {
            output = new fileoutputstream("config.properties");
            properties.setproperty("url", "jdbc:mysql://localhost:3306/");
            properties.setproperty("username", "root");
            properties.setproperty("password", "root");
            properties.setproperty("databases", "music_player");
            properties.store(output, "steven1997 modify" + new date().tostring());
        } catch (ioexception e) {
            e.printstacktrace();
        }finally {
            if(output!=null) {
                try {
                    output.close();
                }catch (ioexception e) {
                    e.printstacktrace();
                }
            }
        }
        
    }
    public static void main(string[] args) {
        testproperties t = new testproperties();
        t.writeproperties();
    }
}

执行后,工程下面会出现一个config.properties文件,属性文件内容如下:

Java Property类使用详解

读取

使用getproperty获取config.properties文件配置文件的各项属性。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package property;
 
import java.io.fileinputstream;
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.util.properties;
 
public class loadproperties {
    public void loadproperties() {
        properties properties = new properties();
        inputstream inputstream = null;
        
        try {
            inputstream = new fileinputstream("config.properties");
            properties.load(inputstream);
            system.out.println("url:" + properties.getproperty("url"));
            system.out.println("username:" + properties.getproperty("username"));
            system.out.println("password:" + properties.getproperty("password"));
            system.out.println("database:" + properties.getproperty("database"));
        } catch (ioexception e) {
            e.printstacktrace();
        }finally {
            if(inputstream !=null) {
                try {
                    inputstream.close();
                } catch (ioexception e) {
                    e.printstacktrace();
                }
            }
        }
        
    }
    public static void main(string[] args) {
        loadproperties l = new loadproperties();
        l.loadproperties();
    }
}

运行后的结果

url:jdbc:mysql://localhost:3306/
username:root
password:root
database:music_player

遍历

遍历属性文件中的键值对

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package property;
 
import java.io.inputstream;
import java.util.enumeration;
import java.util.map.entry;
import java.util.properties;
import java.util.set;
 
public class propertiestest {
    public void printall() {
        properties prop = new properties();
        inputstream input = null;
        try {
            string file = "config.properties";
            input = getclass().getclassloader().getresourceasstream(file);
            if(input == null) {
                system.out.println("无法加载文件" + file);
                return ;
            }
            prop.load(input);
            // 方法一
            set<object> keys = prop.keyset();
            for(object key:keys) {
                system.out.println("key:" + key.tostring() + "|" + "value:" + prop.get(key));
            }
            //方法二:
            set<entry<object, object>> entrys = prop.entryset();//返回的属性键值对实体
            for(entry<object, object> entry:entrys){
                system.out.println("key:"+entry.getkey()+",value:"+entry.getvalue());
            }
            //方法三:
            enumeration<?> e = prop.propertynames();
            while (e.hasmoreelements()) {
                string key = (string) e.nextelement();
                string value = prop.getproperty(key);
                system.out.println("key:" + key + ",value:" + value);
            }
 
        }catch (exception e) {
            e.printstacktrace();
        }finally {
            if(input != null) {
                try {
                    input.close();
                }catch (exception e) {
                    e.printstacktrace();
                }
            }
        }
    }
    public static void main(string[] args) {
        propertiestest p = new propertiestest();
        p.printall();
    }
}

运行结果如下:

key:url|value:jdbc:mysql://localhost:3306/
key:password|value:root
key:database|value:music_player
key:username|value:root
key:url,value:jdbc:mysql://localhost:3306/
key:password,value:root
key:database,value:music_player
key:username,value:root
key:password,value:root
key:url,value:jdbc:mysql://localhost:3306/
key:database,value:music_player
key:username,value:root

 properties文件默认的编码格式居然是iso-8859-1,这样导致往配置文件里面写入中文的时候转换成另一种格式的编码,需要把properties 文件的编码格式改为utf-8,这样才会让配置文件保存中文数据的时候不会出现转码的问题

以上所述是小编给大家介绍的java property类使用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://blog.csdn.net/bo123_/article/details/89059799

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部