Java操作Properties文件简介

Java操作Properties文件简介

本章概要

在Java的编程过程中,我们经常需要在项目内或者是外部创建一些配置文件,用以维护一些与项目相关的基本配置。

因此我们经常需要对这些配置文件进行读写的操作。本章主要介绍了几种常见的操作Properties文件的方法。

 

Properties文件操作简介

Properties文件是我们日常开发中使用最为频繁的配置文件类型之一,对该类型的文件,我们可以使用以下几种方式对其进行读/写的操作:

  • 使用自带java.util.ResourceBundle类或者java.util.PropertyResourceBundle类操作Properties文件;
  • 使用自带java.util.Properties类操作Properties文件;
  • 使用Apache的Commons-Configuration操作Properties文件

 

ResourceBundle操作Properties文件

由于PropertyResourceBundle类继承自ResourceBundle,两者对Properties文件的操作十分相似,因此这里我们只从ResourceBundle类入手来简单介绍一下其操作Properties文件的用法。

其操作方法可以参见以下的代码:

 1 package com.webopenshare.demo.prop.utils;
 2 
 3 import java.util.MissingResourceException;
 4 import java.util.ResourceBundle;
 5 
 6 public class PropUtils {
 7     
 8     private static PropUtils _instance = null;
 9     
10     private ResourceBundle resBundle = null;
11     
12     static {
13         _instance = new PropUtils();
14     }
15     
16     private PropUtils() {
17         loadSysConfig("sysConfig");
18     }
19     
20     public static PropUtils getInstance() {
21         return _instance;
22     }
23     
24     public ResourceBundle loadSysConfig(final String fileName) {
25         resBundle = ResourceBundle.getBundle(fileName);
26         return resBundle;
27     }
28     
29     public String getSysConfig(final String key) {
30         String sysConfig = null;
31         
32         try {
33             sysConfig = resBundle.getString(key);
34         } catch (MissingResourceException e) {
35             sysConfig = key;
36         }
37         
38         return sysConfig;
39     }
40 }
ResourceBundle操作Properties代码示例

通过上面的代码,我们可以看到,ResourceBundle类可以很方便的读取Properties文件的配置内容,但是如果我们想要修改配置内容呢?很遗憾,通过查看ResourceBundle类,我们可以看到,它并没有提供任何的方法用于此操作。

 

java.util.Properties操作Properties文件

java自带了java.util.Properties类,用于读写Properties文件,如下代码所示:

 1 package com.webopenshare.demo.prop.utils;
 2 
 3 import java.io.FileOutputStream;
 4 import java.io.IOException;
 5 import java.util.Properties;
 6 
 7 public class PropUtils {
 8     
 9     private static PropUtils _instance = null;
10     
11     private Properties props = null;
12     
13     private final String CONFIG_FILE = "/sysConfig.properties";
14     
15     static {
16         _instance = new PropUtils();
17     }
18     
19     private PropUtils() {
20         loadSysConfig(CONFIG_FILE);
21     }
22     
23     public static PropUtils getInstance() {
24         return _instance;
25     }
26     
27     public Properties loadSysConfig(final String fileName) {
28         props = new Properties();
29         try {
30             props.load(Properties.class.getResourceAsStream(fileName));
31         } catch (IOException e) {
32             e.printStackTrace();
33         }
34         return props;
35     }
36     
37     public String getSysConfig(final String key) {
38         String sysConfig = props.getProperty(key, key);
39         return sysConfig;
40     }
41     
42     public void updateSysConfig(final String key, final String value) {
43         props.setProperty(key, value);
44     }
45     
46     public void persistSysConfig() {
47         try {
48             props.store(new FileOutputStream(System.getProperty("user.dir") + "/config" + CONFIG_FILE), "Updated System Configure");
49         } catch (IOException e) {
50             e.printStackTrace();
51         }
52     }
53 }
java.util.Properties读写Propery配置文件代码示例

通过上面的示例,我们知道了:

  • 通过java.util.Properties的load(inStream)的方法,可以加载Properties文件的配置;
  • 通过getProperty(key)或者getProperty(key, defaultValue)的方法可以获取指定key的配置属性;
  • 通过setPerperty(key, value)可以插入或者是跟新配置;
  • 通过store(outStream, comment)的方法,可以把最终的修改持久化到文件当中

但是,使用java.util.Properties更新或者插入新的配置属性时,我们不能够保有原先文件的配置格式,包括了配置的顺序跟配置的Comments,这并不是最佳的效果,我们希望能够保持配置的Comments,这对我们之后的维护有重要的提示作用。

 

Apache Commons Configuration操作Properties文件

我们可以通过Apache开源项目,Commons-Configuration来操作Properties文件,使用时需要引入以下的依赖:

  • commons-configuration2-${releaseVersion}.jar
  • commons-lang3-${releaseVersion}.jar
  • commons-logging-${releaseVersion}.jar
 1 package com.webopenshare.demo.prop.utils;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 import java.io.InputStreamReader;
 8 
 9 import org.apache.commons.configuration2.PropertiesConfiguration;
10 import org.apache.commons.configuration2.PropertiesConfigurationLayout;
11 import org.apache.commons.configuration2.ex.ConfigurationException;
12 
13 public class PropUtils {
14     
15     private static PropUtils _instance = null;
16     
17     private static PropertiesConfiguration config = new PropertiesConfiguration();
18     
19     private static PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout();
20     
21     private static final String CONFIG_FILE = "C:/Config/sysConfig.properties";
22     
23     static {
24         _instance = new PropUtils();
25         _instance.loadSysConfig(CONFIG_FILE);
26     }
27     
28     private PropUtils() {
29     }
30     
31     public static PropUtils getInstance() {
32         return _instance;
33     }
34     
35     public void loadSysConfig(final String fileName) {
36         try {
37             layout.load(config, new InputStreamReader(new FileInputStream(fileName)));
38         } catch (FileNotFoundException | ConfigurationException e) {
39             e.printStackTrace();
40         }
41     }
42     
43     public static String getStringConfig(final String key) {
44         return config.getString(key);
45     }
46     
47     public static void addOrUpdateStringConfig(final String key, final String value) {
48         config.setProperty(key, value);
49         persistSysConfg();
50     }
51     
52     public static void persistSysConfg() {
53         try {
54             FileWriter out = new FileWriter(CONFIG_FILE, false);
55             layout.save(config, out);
56         } catch (IOException | ConfigurationException e) {
57             e.printStackTrace();
58         }
59     }
60 }
Apache Commons Configure操作Properties代码示例

使用这个开源库,我们可以很方便的来维护配置文件信息,而且可以确保在跟新或者插入新的配置信息时,保持文件的格式不受影响(保留配置的顺序以及配置的Comments)。

 

 

我要小额赞助,鼓励作者写出更好的文章:

 

转载于:https://www.cnblogs.com/websharing/p/8522106.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值