一、前言                              

Java工程中想log4j、数据库连接等配置信息一般都写在.properties文件中,那么如何读取这些配置信息呢?下面把相关方法记录下来供以后查阅。

二、.properties文件                        

配置文件的一种,内容以键值对的形式存在,且每个键值对独占一行。#号作为行注释的起始标志,中文注释会自动进行unicode编码。示例:

# ip and port of server socket
ip=127.0.0.1
port=
# error message
msg=I'm sorry, bye bye!

假设上述内容存储在config.properties文件下,且bin目录结果如下:

bin

|-- main

|-- Demo.class

|-- config.properties

后续章节的示例将以上述内容作为目标对象来操作。

三、通过 Properties对象 操作                    

读取属性,示例:

public class Demo{
public static void main(String[] args){
Properties props = new Properties(); InputStream in = Demo.class.getResourceAsStream("../config.properties"); // 或使用文件输入流(不推荐),假设当前工作目录为bin
//InputStream in = new FileInputStream("./config.properties"); props.load(in);
in.close(); // 读取特定属性
String key = "ip";
String ip = props.getProperty(key); // 遍历所有属性,方式一
Set keys = props.keySet();
for (Interator it = keys.iterator(); it.hasNext();){
String k = it.next();
System.out.println(k + ":" + props.getProperty(k));
}
// 遍历所有属性,方式二
Enumeration en = props.propertyNames();
while (en.hasMoreElements()){
String k = en.nextElement();
System.out.println(k + ":" + props.getProperty(k));
}
}
}

1. 通过 Demo.class.getResourceAsStream("../config.properties"); 读取配置文件,配置文件的相对路径以类文件所在目录作为当前目录。

2. 通过 new FileInputStream("./config.properties"); 读取配置文件,配置文件的相对路径以工作目录(可以通过 System.getProperty("user.dir") 获取工作目录)作为当前目录。

注意:上述两种方式获取的配置文件均没有被缓存。每次都要重新加载配置文件。

写属性,示例:

Properties props = new Properties();
InputStream in = getClass().getResouceAsStream("properties文件相对于当前类加载路径的文件目录");
props.load(in); OutputStream output = new FileOutputStream("properties文件路径");
props.setProperty("ip", "10.248.112.123"); // 修改或新增属性键值对
props.store(output, "modify ip value"); // store(OutputStream output, String comment)将修改结果写入输出流
output.close()

四、通过 ResourceBundle对象 操作                    

通过该方式仅能读取配置文件而已,不能进行写操作。示例:

// ResourceBundle rb = ResourceBundle.getBundle("配置文件相对工程根目录的相对路径(不含扩展名)");
ResourceBundle rb = ResourceBundle.getBundle("config");
try{
String name = rb.getString("name");
}
catch(MissingResourceException ex){

注意:上述方式会缓存配置文件信息,后续读取时均是读取缓存中的内容,若在此期间修改了配置内容是无法实时同步的

ResourceBundle有两个子类ListResourceBundle和PropertyResourceBundle,在读取properties文件时实际上是使用PropertyResourceBundle来处理。

题外话:

ResourceBundle主要用于解决国际化和本地化问题。通过资源命名定义各语言和方言的信息,然乎程序在运行时获取当前本地化信息,并根据本地化信息加载相应的资源完成本地化。

资源命名规范:

// 仅含家族名
MyResource // 含家族名和语言
MyResource_en // 含家族名、语言和国家
MyResource_en_US

对应的Java代码:

// ResourceBundle首先会根据语言和国家的本地化信息去查找资源(假设现在要查找MyResource_zh_CN),当找不到时就会找MyResource_zh,再找不到就用MyResource。
ResourceBundle rb = ResourceBundle.getBundle("MyResource", Locale.getDefault())

五、总结                              

当然方式不止这些啦,日后继续补充!

尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/3995386.html  ^_^肥仔John

六、参考                              

http://www.cnblogs.com/panjun-Donet/archive/2009/07/17/1525597.html

JAVA魔法堂:读取.properties配置文件的更多相关文章

  1. 如何在java类中读取Properties配置文件

    在com.example包下有一个test.properties文件和测试类PropertyReadTest.java. test.properties 文件内容: author=zeige  tea ...

  2. javaweb 读取properties配置文件参数

    场景1:在servlet中读取properties配置文件参数 protected void doGet(HttpServletRequest request, HttpServletResponse ...

  3. java读取properties配置文件总结

    java读取properties配置文件总结 在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等.而我们经常读取配置文件的方法有以下两种: (1) ...

  4. Java 读取 .properties 配置文件的几种方式

    Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配 ...

  5. java读取.properties配置文件的几种方法

    读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的):一.通过jdk提供的java.util.Properties类.此类继承自java.util. ...

  6. Java 读取 .properties 配置文件

    java 开发中,经常要读取 properties 配置文件,下面介绍几种读取方式: 1.基于 InputStream 读取配置文件 该方式的优点在于可以读取任意路径下的配置文件 Properties ...

  7. Java读取properties配置文件工具类

    1.   PropertyUtils.java package javax.utils; import java.io.InputStream; import java.util.Properties ...

  8. 【转载】java读取.properties配置文件的几种方法

    读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的):一.通过jdk提供的java.util.Properties类.此类继承自java.util. ...

  9. Java读取Properties配置文件

    1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集.不过Properties的键和值都是字符串 ...

  10. java项目中读取properties文件

    这里的配置文件都放在src下面, System.properties的内容 exceptionMapping=exceptionMapping.properties config=config.pro ...

随机推荐

  1. Linux 查看端口被占用情况

    今天发现服务器上Tomcat 8080端口起不来,老提示端口已经被占用. 使用命令: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat ...

  2. 【干货】个人工作文档节选:XAML MVVM 框架易用性细节优化Tips

    1    易用性细节优化 1.1 代码片段 在ViewModel内,会有大量重复性的在Property set中激发 INotifyPropertyChanged.PropertyChanged 事件 ...

  3. (转)create table #temptable 临时表 和 declare @bianliang table ()表变量

    在开发过程中,经常会遇到使用表变量和本地临时表的情况.下面是对二者的一个介绍: 1. 为什么要使用表变量 表变量是从2000开始引入的,微软认为与本地临时表相比,表变量具有如下优点:  a.与其他变量 ...

  4. 使用Installutil安装系统服务方法

    系统必须装有.net Framework2.0然后点击开始-运行输入以下指令即可完成相应操作安装服务:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Ins ...

  5. Java多线程(3) Volatile的实现原理

    Volatile变量 在程序设计中,尤其是在C语言.C++.C#和Java语言中,使用volatile关键字声明的变量或对象通常拥有和优化和(或)多线程相关的特殊属性.通常,volatile关键字用来 ...

  6. js 去掉字符串前面的0

    <script>var a='00123';alert(a.replace(/\b(0+)/gi,""));</script>

  7. java产生随机数的几种方式

    java产生随机数的几种方式 一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他 ...

  8. HL AsySocket 服务开发框架 - 一般性测试1

    一 概述 Socket服务器性能要好就要经过无数次的测试,来保证,以下是记录一次的测试经过. 机器配置:Inter(R) Core(TM) i3-2310m CPU 2.10GHz RAM 6.00G ...

  9. Exists 比Contains 慢非常多。

    void Main() { List<string> s = new List<string>(){}; for(int i=0;i<10000;i++) { s.Add ...

  10. VS2010+Selenium测试脚本设计

    VS2010+Selenium测试脚本设计 http://www.docin.com/p-755903506.html