服务器之家

服务器之家 > 正文

详解Java程序读取properties配置文件的方法

时间:2020-04-19 12:13     来源/作者:双子座

在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的。比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么IP ,数据库名称,表名称,数据库主机等信息是我们本地的,要使得这个操作数据的模块具有通用性,那么以上信息就不能写死在程序里。通常我们的做法是用配置文件来解决。
各种语言都有自己所支持的配置文件类型。比如Python ,他支持.ini 文件。因为他内部有一个ConfigParser 类来支持.ini 文件的读写,根据该类提供的方法程序员可以自由的来操作.ini 文件。而在Java 中,Java 支持的是.properties 文件的读写。JDK 内置的java.util.Properties 类为我们操作.properties 文件提供了便利。

一..properties 文件的形式

?
1
2
3
4
5
6
7
8
9
# 以下为服务器、数据库信息
dbPort = localhost
databaseName = mydb
dbUserName = root
dbPassword = root
# 以下为数据库表信息
dbTable = mytable
# 以下为服务器信息
ip = 192.168.0.9

上面的文件中我们假设该文件名为:test.properties 文件。其中# 开始的一行为注释信息;在等号“= ”左边的我们称之为key ;等号“= ”右边的我们称之为value 。(其实就是我们常说的键- 值对)key 应该是我们程序中的变量。而value 是我们根据实际情况配置的。

二.JDK 中的Properties 类

Properties 类存在于胞Java.util 中,该类继承自Hashtable,它提供了几个主要的方法:
1. getProperty(String key),  用指定的键在此属性列表中搜索属性。也就是通过参数key ,得到key 所对应的value 。
2. load(InputStream inStream),从输入流中读取属性列表(键和元素对)。通过对指定的文件(比如说上面的    test.properties 文件)进行装载来获取该文件中的所有键- 值对。以供getProperty(String key)来搜索。
3. setProperty(String key,String value),调用Hashtable的方法put。他通过调用基类的put方法来设值键- 值对。
4. store(OutputStream out,String comments),  以适合使用load方法加载到Properties表中的格式,将此Properties表中的属性列表(键和元素对)写入输出流。与load 方法相反,该方法将键- 值对写入到指定的文件中去。
5. clear(),清除所有装载的键 - 值对。该方法在基类中提供。
有了以上几个方法我们就可以对.properties 文件进行操作了!

三. Java读取properties文件示例
有一个properties文件box.properties,内容如下:

?
1
2
3
4
5
Color=Red
Name=Box
Length=18
Width=7
Heigth=8

获取其中的属性值,可用如下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
InputStream in = null;
Properties p = new Properties();
try {
  in = new BufferedInputStream(new FileInputStream("box.properties"));
  p.load(in);
} catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
Enumeration<Object> keys = p.keys();
while (keys.hasMoreElements()) {
  String key = (String) keys.nextElement();
  System.out.println(key + ":" + p.getProperty(key));
}

或者:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
InputStream in;
ResourceBundle rb = null;
try {
  in = new BufferedInputStream(new FileInputStream("box.properties"));
  rb = new PropertyResourceBundle(in);
} catch (FileNotFoundException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
if (rb != null) {
  Enumeration<String> keys = rb.getKeys();
  while (keys.hasMoreElements()) {
    String key = (String) keys.nextElement();
    System.out.println(key + ":" + rb.getString(key));
  }
}

 不过输出顺序与原始文件不同。

相关文章

热门资讯

沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部

628
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40