概念理解
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文件,屬性文件內容如下:
讀取
使用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