Java操作Properties文件简介

956 阅读7分钟
原文链接: www.cnblogs.com
WebOpenShare 闻道有先后,术业有专攻,如是而已!

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)。

 

 

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

 

本博客致力于为互联网开发入门学者提供一个学习平台,主要课程涵盖JavaScript,HTML5,Android,Python以及J2EE等等。 WEB公开课,您身边的互联网学习伴侣!

posted on 2018-03-07 17:07 WebOpenShare 阅读(27) 评论(0) 编辑 收藏

刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录注册访问网站首页。 【推荐】超50万VC++源码: 大型工控、组态\仿真、建模CAD源码2018!
【活动】2050 大会日程,5.25-5.27相聚杭州·云栖
【抢购】新注册用户域名抢购1元起
【推荐】云+校园计划邀请好友拼团有礼,奖励多多
tencent0228 最新IT新闻:
· 携程CEO孙洁:打破职业天花板 让更多女性成为领导者
· 滴滴也要做分时租车业务:以后还有必要买车吗?
· 用户称iCloud遭苹果工作人员入侵并遭威胁
· 立陶宛拟发行数字纪念币 使用区块链或类似技术设计
· Android端Chrome 65即将上架Play商城
» 更多新闻... 阿里云C2-1208 最新知识库文章:
· 写给自学者的入门指南
· 和程序员谈恋爱
· 学会学习
· 优秀技术人的管理陷阱
· 作为一个程序员,数学对你到底有多重要
» 更多知识库文章...
< 2018年3月 >
25 26 27 28 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
1 2 3 4 5 6 7

导航

统计

  • 随笔 - 2
  • 文章 - 0
  • 评论 - 2
  • 引用 - 0

公告

昵称:WebOpenShare
园龄:1年
粉丝:0
关注: 0 +加关注

搜索

   

常用链接

随笔分类

随笔档案

最新评论

  • 1. Re:跨应用Session共享
  • @ziq711上面文末有罗列一些常用的解决方法,没有实例演示。当然上面主要针对的是单服务器非分布式环境下的一些思路。如果你有好的解决思路,也请分享给大家学习,谢谢:-D!...
  • --WebOpenShare
  • 2. Re:跨应用Session共享
  • 没解决方案吗?
  • --ziq711

阅读排行榜

评论排行榜

推荐排行榜